让 Claude Code 写出 Spring Boot 官方级别的 Java 代码
用 Claude Code 写 Java 代码有一段时间了,从一开始的磕磕绊绊到现在能稳定产出符合团队规范的代码,踩了不少坑。这篇分享一下我的优化思路。
问题在哪
实际用下来,Claude Code 在 Java 项目上经常出这些问题:
- 反复确认:每次生成代码都要问”你们项目是用构造器注入还是字段注入?””BaseTest 放在哪?”
- 风格漂移:同一份代码,这次生成的 Controller 用
Mono<Result<T>>,下次就变成ResponseEntity<T> - 测试混乱:MockMvc、WebTestClient、@DataJpaTest 混着来,不确定该用哪个
- 规范散落在各处:Java 规范在项目 A,测试规范在项目 B,每次都要翻好几个文件
根本原因是:Claude 没有一个统一的地方快速获取项目规范。
解决思路
把分散的规范整合到一个 Claude Code 能第一时间读取的地方:
- 全局规范 →
~/.claude/CLAUDE.md(放跨项目的通用规范) - 项目模板 →
.claude/templates.md(放项目特定的代码模板) - 示例代码 → 用可运行的示例验证规范是否被正确应用
具体怎么做
1. 建立全局规范文件
在用户目录下创建 ~/.claude/CLAUDE.md,内容按优先级排列:
基础编码习惯
1 | // 日志只用 SLF4J |
依赖注入方式
1 | // 用这个 |
Controller 模板(Spring Boot 3.x + WebFlux)
1 |
|
测试写法
1 | // 所有测试继承 BaseTest |
2. 项目级模板
在项目根目录建 .claude/templates.md,放一些重复率高的代码结构:
- Controller 骨架(含异常处理)
- Service 层标准结构
- Repository 方法命名约定
- Entity + DTO 转换模板
这样 Claude 生成代码时直接套用,不用每次都从零推理。
3. 验证规范生效
建一个 ExampleController 测试一下,看看 Claude 是否自动应用了规范:
- 有没有用
@RequiredArgsConstructor - 返回类型是不是
Mono<Result<T>> - 日志是不是
log.info而不是System.out - 测试有没有继承
BaseTest
如果不对,回头调整 CLAUDE.md 的表述方式,直到稳定输出符合预期的代码。
效果如何
拿”创建一个完整的 Controller + Service + Test”这个场景对比:
| 环节 | 优化前 | 优化后 |
|---|---|---|
| 确认项目规范 | 30-60 秒翻文件 | 0 秒,直接套用 |
| 生成代码 | 2 分钟 | 1 分钟 |
| 修复编译错误 | 3 分钟(风格不一致导致) | 基本为 0 |
| 总计 | ~7 分钟 | ~1 分钟 |
更关键的是代码风格统一了,Review 的时候不用再说”这里应该用构造器注入”。
完整的 CLAUDE.md 结构
我的全局规范文件长这样:
1 | # Java 编程规范 |
额外收益
技能调用指南:在规范里注明什么场景调用什么 Skill,比如:
- 遇到 Java 报错 → 自动调用
c-java-master - 需要重构代码 →
/重构触发c-spring-refactor - 写测试用例 →
/测试触发c-java-tester
质量检查清单:生成代码前 Claude 会自动确认:
- 构造器注入?
- 方法行数 < 30?
- 异常记录完整堆栈?
快速开始
如果你想复用这套方案:
- 复制上面的规范结构到
~/.claude/CLAUDE.md - 改成你项目的包名、响应类名、测试基类路径
- 创建一个测试 Controller,验证 Claude 的输出
- 根据结果微调规范文件的表述
不需要一次做到完美,先用起来,再慢慢迭代。
参考
这套方法的核心就三点:规范集中管理、代码模板化、用示例验证。不是什么高深的技术,但确实能让 AI 辅助编码的体验上一个台阶。
有问题欢迎在评论区交流。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 晨启Tech!
评论






