Java 后端开发的实用示例与常用命令


后端开发往往需要编写大量重复的样板代码来实现基础功能,这会让开发过程变得枯燥且缓慢。

Claude Code 直接在代码库中工作,可以在开发工作流中编辑文件、执行命令,是名副其实的智能编程助手——它能读取仓库内容、进行代码修改,并与终端、IDE、桌面应用和浏览器深度集成。

对于跨多个层级的后端任务,Claude Code 尤为出色:实现新功能、修复 Bug、重构代码、编写测试、准备发布版本、代码审查……一手包办。

以 REST 接口为例,一个端点往往涉及 Controller、Service、Repository、校验规则、DTO 以及测试。Claude Code 能跨越这些文件协同工作,并保持修改的一致性。


安装与配置

前置要求

  • Node.js 18+(推荐 LTS 版本)
  • macOS 10.15+、Ubuntu 20.04+/Debian 10+,或 Windows 10+(需开启 WSL)
  • 至少 4GB 内存
  • Claude.ai 付费订阅(Pro、Max5 或 Max20),或 Anthropic API Key

安装 Claude Code

npm install -g @anthropic-ai/claude-code

安装完成后,执行 claude 命令会自动打开浏览器进行身份验证。如果你更倾向于直接使用 API Key,只需设置环境变量:

export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_API_KEY=${YOUR_API_KEY}

最简单的启动方式是进入项目根目录,直接运行:

claude

如果只想快速提问而不开启完整会话,可以使用 -p(print)标志:

claude -p "解释这个 Spring Boot 服务的功能"

这种方式非常适合快速查询,也支持管道输入:

cat error.log | claude -p "分析这些错误的根本原因"

常用命令速查

Shell 命令(会话外使用)

在终端中,于 Claude Code 会话启动前后使用:

命令 说明
claude 启动交互式会话
claude -p "问题" 单次提问,不启动完整会话
claude --add-dir ../其他服务 将额外目录加入上下文
claude --resume 恢复上次会话

斜杠命令(会话内使用)

进入 Claude Code 会话后,可使用以下斜杠命令控制行为:

命令 说明
/init 初始化项目,生成 CLAUDE.md 配置文件
/clear 清空当前对话上下文
/help 查看帮助信息
/exit 退出当前会话

多目录支持

默认情况下,Claude Code 只读取当前工作目录。对于 Spring Boot 微服务项目(多仓库或 Mono-repo),可以通过 --add-dir 扩展上下文范围:

claude --add-dir ../user-service --add-dir ../payment-service

当一个改动跨越多个服务时,这个功能极为有用,Claude 能理解各服务之间的关联关系。


配置 CLAUDE.md 项目说明文件

在项目中运行 /init 后,会生成一个 CLAUDE.md 文件。这是一份纯 Markdown 格式的项目说明文档,用于描述项目结构、编码规范以及各种注意事项。Claude 在每次会话开始时都会读取这个文件,相当于给它的一份"项目简报",省去了每次重复解释背景的麻烦。

以下是一个 Spring Boot 3 微服务项目的 CLAUDE.md 示例:

# 项目:订单服务(Order Service)

## 技术栈
- Java 24
- Spring Boot 3.4
- Maven
- PostgreSQL(通过 Spring Data JPA)
- Kafka 用于异步消息传递

## 编码规范
- DTO 使用 Java Record 类型
- 有数据库写操作的 Service 方法必须加 @Transactional 注解
- 使用 @RestControllerAdvice 进行全局异常处理
- 包结构:controller → service → repository → domain

## 测试规范
- 单元测试:JUnit 5 + Mockito
- 集成测试:Testcontainers
- 运行单元测试:`mvn test`
- 运行集成测试:`mvn verify`

## 关键文件
- `src/main/resources/application.yml` – 主配置文件
- `docker-compose.yml` – 本地开发环境配置

## 注意事项
- 禁止使用 Lombok(项目已弃用)
- 多行字符串推荐使用 Java 文本块(Text Blocks)

实战工作流:Java + Spring Boot

1. 从零生成 REST 接口

假设我们需要为订单服务新增一个接口,只需这样描述:

用 Spring Boot 3.4 创建一个 POST /orders 接口。
请求体包含:customerId、items(包含 productId 和 quantity 的列表)、shippingAddress。
成功后返回已创建的订单,HTTP 状态码为 201。
DTO 使用 Java Record,并遵循 CLAUDE.md 中的包结构规范。

Claude 会自动生成 Controller、Service、Repository、领域模型和 DTO。

DTO 示例

// 创建订单的请求体
public record CreateOrderRequest(
    Long customerId,            // 客户 ID
    List<OrderItemRequest> items, // 订单商品列表
    String shippingAddress      // 收货地址
) {}

// 单个订单商品
public record OrderItemRequest(
    Long productId, // 商品 ID
    int quantity    // 购买数量
) {}

// 创建成功后返回的订单信息
public record OrderResponse(
    Long orderId,               // 订单 ID
    Long customerId,            // 客户 ID
    List<OrderItemRequest> items, // 商品列表
    String shippingAddress,     // 收货地址
    OrderStatus status,         // 订单状态
    Instant createdAt           // 创建时间
) {}

Controller 示例

@RestController
@RequestMapping("/orders")
public class OrderController {

    private final OrderService orderService;

    // 通过构造函数注入 Service(推荐方式)
    public OrderController(OrderService orderService) {
        this.orderService = orderService;
    }

    @PostMapping
    public ResponseEntity<OrderResponse> createOrder(
            @RequestBody @Valid CreateOrderRequest request) {
        // 调用 Service 层处理业务逻辑
        OrderResponse response = orderService.createOrder(request);
        // 返回 201 Created 状态码及订单数据
        return ResponseEntity.status(HttpStatus.CREATED).body(response);
    }
}

2. 为已有代码生成测试

为 OrderService 编写单元测试。
使用 JUnit 5 和 Mockito。
覆盖以下场景:正常创建订单、商品列表为空、客户不存在。

Claude 会读取实际的 OrderService.java 文件,理解其业务逻辑,然后生成有意义的测试用例:

@ExtendWith(MockitoExtension.class)
class OrderServiceTest {

    @Mock
    private OrderRepository orderRepository; // Mock 订单仓库

    @Mock
    private CustomerRepository customerRepository; // Mock 客户仓库

    @InjectMocks
    private OrderService orderService; // 被测试的 Service

    @Test
    void createOrder_正常请求_返回已创建订单() {
        var customerId = 1L;
        // 构造一个正常的创建订单请求
        var request = new CreateOrderRequest(
            customerId,
            List.of(new OrderItemRequest(10L, 2)), // 商品ID=10,数量=2
            "北京市朝阳区某某路123号"
        );

        // 模拟客户存在
        when(customerRepository.findById(customerId))
            .thenReturn(Optional.of(new Customer(customerId, "张三")));
        // 模拟保存后直接返回传入的对象
        when(orderRepository.save(any())).thenAnswer(inv -> inv.getArgument(0));

        var response = orderService.createOrder(request);

        // 验证返回的客户ID和初始订单状态
        assertThat(response.customerId()).isEqualTo(customerId);
        assertThat(response.status()).isEqualTo(OrderStatus.PENDING);
    }

    @Test
    void createOrder_客户不存在_抛出异常() {
        // 使用一个不存在的客户ID
        var request = new CreateOrderRequest(99L, List.of(), "某地址");

        // 模拟客户不存在的情况
        when(customerRepository.findById(99L)).thenReturn(Optional.empty());

        // 验证会抛出 CustomerNotFoundException
        assertThatThrownBy(() -> orderService.createOrder(request))
            .isInstanceOf(CustomerNotFoundException.class);
    }
}

3. 分析错误日志

方式一:管道输入(会话外)

cat logs/application.log | claude -p "找出这个错误的根本原因,并给出修复建议"

方式二:在会话中直接引用文件

查看 logs/application.log,解释为什么 Kafka 消费者在处理 OrderCreatedEvent 时
抛出了 SerializationException

4. 跨文件批量重构

Claude Code 最强大的能力之一,就是能对整个代码库进行一致性重构:

将 OrderEntity 类重命名为 Order,更新整个代码库中所有相关的
import 语句、JPA 注解和 Repository 接口。

5. 生成 API 文档

读取 OrderController.java,为所有接口生成 OpenAPI 3.0 规范文档,
保存到 src/main/resources/api-docs/orders.yaml。

6. 在后台运行服务

在后台启动 Spring Boot 应用:mvn spring-boot:run
在后台启动 Kafka 消费者
在后台以监听模式运行测试

进阶工具:cc-switch —— Claude Code 的桌面管理助手

项目地址:github.com/farion1231/cc-switch

在实际的后端开发中,我们经常需要在不同 API 服务商之间切换(比如官方 Anthropic、各类中转服务),或者同时管理 Claude Code、Codex、Gemini CLI 等多个 AI 工具的配置。手动编辑配置文件既繁琐又容易出错。

cc-switch 是一款基于 Tauri 2 + Rust + React 构建的跨平台桌面工具,专门为 Claude Code 等 AI CLI 提供可视化的一站式配置管理。

核心功能

功能 说明
Provider 切换 一键切换 API 服务商,无需手动修改配置文件
MCP 服务器管理 可视化管理 MCP 服务器,支持 stdio / http / sse 三种传输类型
Prompts 管理 多套系统提示词预设,一键激活并同步到 CLAUDE.md / AGENTS.md
Skills 管理 自动扫描 GitHub 仓库中的 Skills,一键安装到 ~/.claude/skills/
延迟测速 可视化检测各 API 端点的响应速度
云同步支持 配置目录可指向 Dropbox / OneDrive / iCloud,实现多设备同步
系统托盘快捷切换 点击托盘图标即可即时切换 Provider,无需打开主界面

安装方式

macOS(推荐 Homebrew)

brew tap farion1231/ccswitch
brew install --cask cc-switch

Windows

Releases 页面 下载 .msi 安装包或免安装的便携版 .zip

Linux(Arch)

paru -S cc-switch-bin

Linux(其他发行版)

# Debian/Ubuntu
# 下载 .deb 包后安装

# 通用 AppImage / Flatpak 版本
flatpak install --user ./CC-Switch-vX.X.X-Linux.flatpak
flatpak run com.ccswitch.desktop

在 Java 后端开发中的典型用法

场景 1:在会话中快速切换 API 端点

当你在本地开发时使用中转服务,上线前切回官方 API,只需在托盘菜单点一下,重启 Claude Code 即可生效,无需手动修改 ~/.claude/settings.json

场景 2:管理项目级 CLAUDE.md 提示词

cc-switch 的 Prompts 功能可以保存多套提示词模板——比如一套用于"Spring Boot 微服务开发",另一套用于"数据库重构",随时一键切换并自动同步到 CLAUDE.md:

# Prompts 预设示例:Spring Boot 微服务模式
项目:订单服务
技术栈:Java 24 + Spring Boot 3.4 + PostgreSQL + Kafka
规范:DTO 用 Record,Service 加 @Transactional,禁止 Lombok
测试:JUnit 5 + Mockito + Testcontainers

场景 3:统一管理 MCP 服务器

在 cc-switch 中配置好 MCP 服务器后(如文件系统访问、数据库查询工具等),可以一键同步到 Claude Code 的配置,不再需要手动编辑 JSON。

架构简览

cc-switch 采用清晰的双层存储架构:

~/.cc-switch/
├── cc-switch.db      # SQLite 数据库(存储 Provider、MCP、Prompts、Skills)
├── settings.json     # 本地设备级配置(窗口状态等)
└── backups/          # 自动备份(保留最近 10 份)

这种设计保证了配置不会因意外覆盖而丢失,同时 SQLite 数据库可以通过云盘目录在多台设备间同步。


总结

Claude Code 最适合被当作编程搭档,而非工程判断的替代品。

  • 我们仍然需要思考要构建什么
  • 我们仍然需要审查它生成的代码
  • 但它能帮我们处理那些枯燥重复的部分

善用 Claude Code,让开发者专注于真正需要创造力和判断力的工作。