# 第一篇:Claude Code 入门 —— 理解它如何"读懂"你的 Java 项目

9 阅读8分钟

面对一个十万行代码的 Spring Boot 遗留项目,大多数开发者的感受是:打开 IDE,不知道从哪里下手,随便点开一个 Service 类,四五千行代码,方法之间互相调用,依赖关系一团乱麻。

Claude Code 在这类场景下的定位,和 Copilot、ChatGPT 有本质的不同——它不是"帮你写代码的助手",而是能真正读懂整个项目、自主分析、直接动手的 AI 工程师。这篇文章梳理它的底层工作方式,以及为什么 Spring 项目特别适合用它来重构。


一、Claude Code 是什么?它与 GitHub Copilot 有何不同?

很多开发者第一次接触 Claude Code 时,会把它和 Copilot 混为一谈。两者最根本的区别在于操作粒度

对比维度GitHub CopilotClaude Code
操作单元单个文件内的代码补全整个代码库的理解与重构
上下文范围当前打开的文件项目全局(可读取任意文件)
交互方式自动补全、Tab 接受自然语言对话,主动执行任务
文件操作仅修改当前文件可创建、删除、重命名文件
终端能力可执行 Shell 命令、运行测试
适用场景日常编码加速架构重构、技术迁移、代码审查

Claude Code 运行在你的终端里,它能够主动遍历你的项目目录,理解模块依赖关系,然后像一个资深架构师一样给出重构方案并直接执行。


二、Claude Code 的核心工作机制

2.1 工具调用循环(Agentic Loop)

Claude Code 的底层是一个工具调用循环。当你给它一个任务,它会反复执行以下步骤,直到任务完成:

用户输入任务
    ↓
Claude 分析任务,决定下一步用哪个工具
    ↓
执行工具(读文件 / 写文件 / 执行命令 / 搜索代码)
    ↓
观察结果
    ↓
判断任务是否完成?
  - 否 → 继续下一步工具调用
  - 是 → 返回结果给用户

对于 Java Spring 项目,它能使用的关键工具包括:

  • Read:读取任意 .java.xml.ymlpom.xml 文件
  • Write / Edit:创建或修改源文件
  • Bash:执行 mvn testmvn compilegrep 等命令
  • Search:在整个项目中搜索类名、注解、方法名

2.2 它如何理解一个 Spring 项目的结构?

当开发者告诉 Claude Code "帮我分析这个项目",它会做什么?下面追踪一下它内部的执行过程:

第一步:识别项目类型

读取 pom.xml 或 build.gradle
→ 识别 Spring Boot 版本、依赖项(Spring Data JPA? Spring Security? MyBatis?)
→ 理解技术栈

第二步:理解模块结构

遍历 src/main/java 目录树
→ 识别包名规范(com.company.project.{domain/service/controller/...})
→ 构建模块依赖图

第三步:分析关键文件

读取 @SpringBootApplication 入口类
→ 扫描 @Configuration 类
→ 分析 application.yml / application.properties
→ 理解数据源、缓存、消息队列配置

第四步:建立语义理解

识别 @Service@Repository@Controller 层
→ 理解业务领域(通过类名、方法名推断)
→ 找到关键的业务流程入口

这个过程类似于一个新入职的高级工程师第一天 "熟悉项目"——系统性而非随机性地理解代码库。


三、为什么 Spring 项目特别适合用 Claude Code 重构?

Spring 框架的设计哲学(依赖注入、面向切面、约定优于配置)使得它的项目结构高度规范。这种规范性对 AI 理解代码非常友好:

3.1 注解即文档

Spring 注解本身就携带了大量语义信息:

@Service
@Transactional
public class OrderService {
    
    @Autowired
    private OrderRepository orderRepository;
    
    public Order createOrder(CreateOrderRequest request) {
        // Claude Code 能理解这是"创建订单"的核心业务逻辑
    }
}

Claude Code 看到 @Service + @Transactional 立刻就能推断:这是一个业务服务层,涉及数据库事务。这比读普通函数要高效得多。

3.2 分层架构清晰

标准的 Spring 项目分层(Controller → Service → Repository → Entity)让 Claude Code 能够:

  • 快速定位某个功能的完整调用链
  • 在重构时保持层次边界的一致性
  • 识别跨层违规(比如 Controller 直接调用 Repository)

3.3 配置外化

application.yml 集中了大量环境配置,Claude Code 能通过读取它理解:

  • 数据库类型和连接池配置
  • Redis/消息队列的使用
  • 微服务的注册中心地址
  • 功能开关和业务参数

四、开始之前:让 Claude Code 快速理解你的项目

在实际使用中,以下几个提示词技巧能大幅提升 Claude Code 的理解效率:

4.1 项目概述提示词

第一次使用时,用一段话描述你的项目背景:

这是一个电商平台的后端服务,使用 Spring Boot 2.7 + MyBatis Plus + Redis。
项目按 DDD 思想组织,有 order(订单)、product(商品)、user(用户)、
payment(支付)四个核心模块。当前最大的痛点是 OrderService 类已经有
3000 行代码,需要拆分。请先帮我分析项目结构。

4.2 设立边界提示词

告诉 Claude Code 哪些地方不要动

注意:payment 模块涉及资金安全,任何修改需要我逐行确认。
legacy/ 目录下的代码是历史遗留,暂时不要修改。

4.3 建立 CLAUDE.md 记忆文件

Claude Code 支持在项目根目录创建 CLAUDE.md 文件,作为项目的"长期记忆"。每次启动新会话时,它会自动读取该文件:

# CLAUDE.md - 项目知识库

## 技术栈
- Spring Boot 2.7.x
- JDK 17
- MyBatis Plus 3.5.x  
- Redis 6.x(用于缓存和分布式锁)
- RocketMQ(异步订单处理)

## 架构约定
- Controller 层只做参数校验和响应封装,不写业务逻辑
- Service 层方法必须有 @Transactional 注解(只读方法用 readOnly=true)
- 禁止在 Service 中直接调用另一个 Service 的私有方法

## 命名规范
- 数据库查询方法:find* (单个) / list* (列表) / count* (计数)
- 业务操作方法:create* / update* / delete* / process*

## 当前重构目标
- [ ] 拆分 OrderService(优先)
- [ ] 引入领域事件替代直接方法调用
- [ ] 统一异常处理机制

这个文件让你不需要每次都重新解释项目背景,Claude Code 会主动参考它做决策。


五、Claude Code 的"安全机制"——它不会随意破坏你的代码

初次使用者常常担心:AI 会不会乱改我的代码?Claude Code 内置了多层安全机制:

5.1 主动请求确认

对于高风险操作(删除文件、修改核心配置),Claude Code 默认会先展示计划,等待你确认:

我计划进行以下修改,请确认:
1. 将 OrderService.java(3120行)拆分为 4 个文件
2. 新建 OrderCreationService.java、OrderQueryService.java、
   OrderStateService.java、OrderPaymentService.java
3. 修改 OrderController.java 中的注入引用
4. 不会删除原有的 OrderService.java,而是将其重构为门面类

是否继续?

5.2 可审查的变更差异

每次文件修改,你都可以在 Cursor 的 diff 视图中看到精确的变更内容,就像 Git diff 一样。

5.3 运行测试验证

每次重构后,你可以要求 Claude Code 运行测试:

重构完成后,请运行 mvn test -pl order-service 验证改动没有破坏现有测试

六、一个完整的初次使用示例

以下是一个典型的使用场景演示,展示 Claude Code 分析 Spring 项目时的交互过程:

开发者:

我有一个 Spring Boot 项目在 /home/dev/ecommerce-backend,
请帮我分析它的代码质量,找出最需要优先重构的地方。

Claude Code(内部执行):

[读取 pom.xml] → 识别依赖
[遍历 src/main/java] → 统计文件数量
[读取最大的几个 Service 文件] → 检测代码异味
[搜索 @Deprecated 注解] → 找到遗留代码
[运行 mvn test] → 检查测试覆盖率

Claude Code(输出报告):

分析完成,发现以下主要问题(按优先级排序):

🔴 高优先级
1. OrderService.java(3120行)- 典型的"上帝类"反模式
   - 混合了订单创建、查询、状态流转、退款处理4个职责
   - 建议:按 DDD 聚合根拆分为4个服务类
   
2. ProductController.java 中存在直接的数据库操作(绕过 Service 层)
   - 第 234-267 行直接注入了 ProductRepository
   - 建议:将查询逻辑移至 ProductService

🟡 中优先级  
3. 全局异常处理缺失——各 Controller 重复写 try-catch
4. 配置硬编码——payment 模块有 3 处 API Key 硬编码在代码里

🟢 低优先级
5. 约 40% 的 Service 方法缺少 @Transactional 注解
6. 分页查询没有统一封装,每个地方写法不同

是否要从 OrderService 的重构开始?

这就是 Claude Code 的基本工作模式:理解 → 诊断 → 提案 → 执行


写在最后

理解 Claude Code 最关键的一个认知转变是:它不是一个工具,而是一个可以独立完成任务的协作者。给它一个明确的目标,它会自己去读代码、分析问题、制定方案、执行修改——就像一个真正入职的工程师,而不是一个等你喂代码的补全插件。

下一篇我们进入实战,看看在真实的重构场景里,应该怎么驱动它工作。