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 的桌面管理助手
在实际的后端开发中,我们经常需要在不同 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,让开发者专注于真正需要创造力和判断力的工作。