构建Spring Boot代码审查Skill:让Claude Code成为你的高级架构师

📅 2026/6/18 11:22:34
构建Spring Boot代码审查Skill:让Claude Code成为你的高级架构师
构建Spring Boot代码审查Skill让Claude Code成为你的高级架构师本文手把手教你创建一个专为Spring Boot项目设计的代码审查Skill涵盖从架构规范到安全实践的全面检查让AI辅助团队提升代码质量。一、为什么需要AI驱动的代码审查代码审查是保障软件质量的关键环节但传统人工审查存在明显痛点人力成本高资深工程师时间宝贵难以覆盖所有代码标准不统一不同审查者侧重点不同结论差异大知识传承难团队最佳实践难以固化新人上手慢借助Claude Code的Skills机制我们可以将团队的审查标准、架构原则、安全规范封装成一个可复用的Skill。当开发者提交代码或请求审查时Claude自动加载该Skill化身“虚拟架构师”系统化地检查代码输出结构化报告并给出修复建议。二、Skill核心概念回顾在深入构建审查Skill前先回顾几个关键点概念说明SKILL.md包含YAML元数据name/description和Markdown指令主体的文件是Skill的核心。渐进式披露Claude先加载元数据约30-50 tokens匹配任务后才加载完整指令节省上下文。自动触发当用户请求匹配description时Skill自动激活无需手动指定。项目级安装将Skill文件夹放入.claude/skills/纳入Git版本管理实现团队共享。注博客https://blog.csdn.net/badao_liumang_qizhi三、Spring Boot代码审查Skill的设计3.1 设计目标全面性覆盖Controller、Service、Repository、Entity、Config、Security、Test等所有层次可操作性每项检查都有明确的判定标准和修复提示结构化输出生成包含评分、严重问题、一般问题、改进建议的标准化报告可定制性允许团队根据项目实际情况增删检查项3.2 Skill文件结构.claude/skills/spring-boot-review/ └── SKILL.md3.3 SKILL.md 核心内容解析我们逐块解析该Skill的设计思路。1元数据YAML---name:spring-boot-reviewdescription:对Spring Boot 3.x项目的Java代码进行系统化审查覆盖控制器、服务、仓储、配置、安全、测试等全环节。当用户提到“审查代码”、“代码检查”、“review”或“检查Spring Boot项目”时自动触发。---nameSkill唯一标识description触发条件的关键必须覆盖常见用户表述确保匹配精准。2审查流程总览Skill首先定义了四步流程理解上下文读取pom.xml确定版本和依赖明确审查范围。分层审查按架构层次逐一检查确保无遗漏。输出报告使用固定模板生成结构化报告。交互与跟进对不确定处提问并可按需提供修复代码。3分层检查项详解控制器层Controller检查点重要性常见问题使用RestController必需误用Controller导致返回视图路径规范/api/v1/...推荐路径混乱无版本管理参数校验Valid必需未校验导致脏数据进入服务层使用DTO而非Entity返回高危暴露数据库字段引发安全风险不捕获异常必需捕获异常后返回非标准响应破坏全局处理无业务逻辑必需控制器内写if/else破坏分层服务层Service检查点重要性常见问题构造器注入非Autowired字段推荐字段注入导致单元测试困难Transactional粒度重要过大事务导致锁竞争过小导致数据不一致自定义业务异常重要抛出通用RuntimeException难以区分错误类型复杂条件分支建议大量if/else可引入策略模式或状态机外部调用容错超时/重试重要未处理导致级联故障数据访问层Repository检查点重要性常见问题SQL注入风险Query拼接高危使用字符串拼接参数易被注入分页排序正确使用建议未使用Pageable导致全量查询方法命名符合规范建议过长或模糊命名影响可读性实体与DTO检查点重要性常见问题实体与DTO分离必需直接返回实体或实体中包含JSON注解Lombok合理使用建议滥用Data导致无参构造器暴露或EqualsAndHashCode调用延迟加载敏感字段脱敏JsonIgnore重要密码等字段被序列化输出全局异常处理检查点重要性常见问题存在ControllerAdvice必需无统一处理每个控制器各自捕获统一错误响应格式推荐code、message、timestamp等不统一处理参数校验异常必需MethodArgumentNotValidException未捕获返回500配置与安全检查点重要性常见问题类型安全的配置绑定ConfigurationProperties推荐散落的Value难以维护Spring Security配置重要未设置权限、密码未编码、CORS配置不当敏感信息外泄日志、响应高危打印密码、令牌等测试可选切片测试WebMvcTest、DataJpaTest使用Mockito模拟依赖分支覆盖率和异常场景覆盖代码风格包命名规范注释完整性特别是复杂逻辑日志级别使用Slf4j四、报告模板设计Skill强制要求输出结构化报告包含以下部分# Spring Boot 代码审查报告 **项目**[项目名称] **审查范围**[具体包/文件] **审查日期**[日期] ## 总体评价 - **评分**[优秀 / 良好 / 及格 / 待改进] - **主要优点**23个 - **主要缺陷**23个 ## 严重问题必须修复 | 文件 | 行号 | 问题描述 | 建议修复 | |------|------|----------|----------| ## 一般问题建议优化 | 文件 | 行号 | 问题描述 | 建议修复 | |------|------|----------|----------| ## 最佳实践建议 24条针对性改进建议 ## 下一步行动 - [ ] 行动1 - [ ] 行动2这种模板化输出便于团队追踪问题、分配修复任务并与CI/CD流程集成。五、如何使用该Skill5.1 安装步骤在项目根目录创建.claude/skills/spring-boot-review/目录。将上述SKILL.md内容保存到该目录下。可选在根目录的CLAUDE.md中补充项目特定的编码规范如DTO后缀、异常基类等Skill会自动继承这些约定。完整SILL.md内容:--- name: spring-boot-review description: 对Spring Boot 3.x项目的Java代码进行系统化审查覆盖控制器、服务、仓储、配置、安全、测试等全环节。当用户提到“审查代码”、“代码检查”、“review”或“检查Spring Boot项目”时自动触发。 --- # Spring Boot 代码审查技能 你是一名拥有十年经验的 Java 架构师专精于 Spring Boot 生态。收到代码审查请求后请严格按照以下流程执行并输出结构化的审查报告。 ## 审查流程 ### 第一步理解上下文 1. 如果用户指定了具体文件或包路径优先分析该范围。 2. 否则默认审查 src/main/java 下的所有代码可询问用户是否需包含测试代码。 3. 先通过 pom.xml 或 build.gradle 了解项目使用的 Spring Boot 版本、主要依赖如 JPA、MyBatis、Security、Cloud 等以确定适用的最佳实践。 ### 第二步分层审查按顺序 #### 2.1 控制器层Controller **检查项** - [ ] 类上是否有 RestController 或 Controller 注解 - [ ] 是否使用了 RequestMapping 或衍生注解GetMapping 等并定义了合理的路径如 /api/v1/... - [ ] 方法参数是否使用 Valid / Validated 进行校验 - [ ] **是否直接返回了实体类Entity** → 必须使用 DTO 或 VO避免暴露内部结构。 - [ ] 是否捕获了异常→ 控制器不应捕获异常应交给全局异常处理器。 - [ ] 是否在控制器中编写了业务逻辑→ 仅做参数校验、调用服务、返回响应。 - [ ] 是否使用了 ResponseStatus 或 ResponseEntity 正确设置 HTTP 状态码 #### 2.2 服务层Service **检查项** - [ ] 类上是否标注 Service - [ ] 是否使用**构造器注入**推荐而非 Autowired 字段注入 - [ ] 业务方法是否合理划分单一职责 - [ ] 是否使用了 Transactional检查事务边界是否合理通常放在 service 层避免过大。 - [ ] 是否抛出**自定义业务异常**而非 RuntimeException - [ ] 是否有过多的 if/else 或 switch考虑使用策略模式或枚举 - [ ] 是否对输入参数进行了业务级校验非空、范围等 - [ ] 是否调用了其他 service 或外部接口是否有超时/重试等容错处理 #### 2.3 数据访问层Repository / DAO **检查项** - [ ] 接口是否继承 JpaRepository或 MyBatis-Plus 的 BaseMapper - [ ] 自定义查询方法命名是否符合 Spring Data 规范 - [ ] 使用原生 SQL 或条件构造器时是否存在 SQL 注入风险检查 Query 中的拼接 - [ ] 是否合理使用分页Pageable和排序 - [ ] 是否在 repository 中定义了不必要的复杂方法 #### 2.4 实体与 DTO **检查项** - [ ] 实体类是否使用 Entity并正确配置 JPA 注解Id、GeneratedValue、Column - [ ] 是否使用 Lombok 简化代码Data、Builder 等 - [ ] DTO/VO 是否与实体分离是否使用 JsonIgnore 避免序列化敏感字段 - [ ] 是否在实体中编写了业务逻辑→ 实体应是纯数据容器逻辑应放到 service。 #### 2.5 全局异常处理Exception Handler **检查项** - [ ] 是否存在 ControllerAdvice 或 RestControllerAdvice 类 - [ ] 是否使用 ExceptionHandler 统一处理自定义异常和标准异常 - [ ] 错误响应格式是否统一如包含 code、message、timestamp - [ ] 是否处理了参数校验失败异常MethodArgumentNotValidException #### 2.6 配置类与安全 **检查项** - [ ] 是否使用 Configuration 和 Bean 合理组织配置 - [ ] 是否将外部配置application.yml通过 ConfigurationProperties 绑定为类型安全的类 - [ ] 如果使用了 Spring Security检查 - [ ] 是否配置了 SecurityFilterChain - [ ] 是否对敏感接口进行了权限控制PreAuthorize - [ ] 密码是否使用 PasswordEncoder 编码 - [ ] CORS 配置是否正确若前后端分离 #### 2.7 单元测试与集成测试 **检查项**如果用户要求审查测试代码 - [ ] 是否使用 SpringBootTest 或 WebMvcTest / DataJpaTest 切片测试 - [ ] 是否使用 Mockito 模拟依赖 - [ ] 是否覆盖了核心业务分支 - [ ] 是否验证了异常场景 #### 2.8 代码风格与规范 - [ ] 包命名是否符合规范如 com.example.project.module - [ ] 类、方法、变量命名是否清晰且符合 CamelCase - [ ] 是否包含必要的注释尤其是复杂逻辑 - [ ] 是否使用了 Slf4j 并合理打印日志不要过多或过少 ### 第三步输出审查报告 请按以下模板生成最终报告 markdown # Spring Boot 代码审查报告 **项目**[项目名称] **审查范围**[具体包/文件] **审查日期**[日期] ## 总体评价 - **评分**[优秀 / 良好 / 及格 / 待改进] - **主要优点**列出 23 个亮点 - **主要缺陷**列出 23 个核心问题 ## 严重问题必须修复 | 文件 | 行号 | 问题描述 | 建议修复 | |------|------|----------|----------| | ... | ... | ... | ... | ## 一般问题建议优化 | 文件 | 行号 | 问题描述 | 建议修复 | |------|------|----------|----------| | ... | ... | ... | ... | ## 最佳实践建议 列出 24 条针对该项目的具体改进建议例如引入统一响应体、添加缓存、优化事务粒度等 ## 下一步行动 - [ ] 行动1 - [ ] 行动2 5.2 触发方式自动触发在Claude Code会话中说出关键词例如“帮我审查一下UserController这个类。”“对整个项目做一次代码质量检查。”“我的Spring Boot项目快上线了帮我review一遍。”手动触发输入/spring-boot-review强制启用如果自动匹配未生效。5.3 交互示例用户请按照 spring-boot-review 技能审查我的com.example.demo.controller.UserController和com.example.demo.service.UserService文件。Claude加载Skill后读取两个文件的代码。依次检查控制器、服务层相关项。发现问题后会提问确认例如“我看到UserController的create方法直接返回了User实体是否考虑改用UserDto”。生成完整报告并附上修复代码示例如果需要。测试效果六、扩展与定制建议每个团队都有自己的技术栈和规范Skill应当具备可定制性。6.1 添加团队特有规则例如你的团队强制使用Slf4j且禁止System.out.println可以在Skill中增加检查项#### 日志规范 - [ ] 是否使用 Slf4j 而非 System.out - [ ] 日志级别是否正确debug/info/warn/error6.2 针对不同模块拆分Skillspring-boot-security-review专注安全配置spring-boot-performance-review关注缓存、异步、连接池spring-boot-test-review专注于测试覆盖率与质量6.3 结合CI/CD可以将Skill集成到GitHub Actions中每次PR自动触发审查并评论报告实现自动化代码质量门禁。七、关键知识点提炼知识点说明构造器注入 vs 字段注入构造器注入使依赖不可变且便于单元测试无需反射。事务传播与隔离级别根据业务场景选择REQUIRED、REQUIRES_NEW等避免死锁。全局异常处理统一处理避免重复代码且能返回标准错误格式提升API友好性。DTO与Entity分离防止敏感字段泄露同时解耦API与数据库模型。Spring Security权限控制使用PreAuthorize实现方法级权限比URL拦截更细粒度。SQL注入防范使用JPA参数绑定:name而非字符串拼接。八、结语通过创建Spring Boot代码审查Skill我们不仅将团队多年的经验沉淀为可执行的知识库还实现了AI辅助审查的自动化。开发者提交代码后Claude Code能够快速定位潜在问题并提供修复指导既节省了高级工程师的时间又加速了新人的成长。这个Skill只是一个起点。你可以根据项目特点不断迭代让它覆盖更多场景如微服务调用链、性能监控等。最终Skill将成为团队不可或缺的“代码质量守护者”。延伸阅读Claude Code Skills官方文档Spring Boot最佳实践汇总OWASP安全编码指南