详细分析 ▾
运行时依赖
安装命令
点击复制技能文档
Java Code Review - Java项目代码评审工具 概述
智能化Java项目代码评审工具,完整流程(7步):
Git Diff 变更获取 - 拉取代码变更内容(支持 --缓存d / 分支对比) 完整上下文分析 - 分析调用链路,推断业务逻辑 PRD文档生成 - 覆盖所有变更点(新增+修改) 代码检测(P0/P1快速扫描) - 严重缺陷和代码缺陷快速定位 细粒度代码审查清单 - 12类深度检查(A-L):Null安全、异常处理、流s、并发、Java惯用法、资源管理、API设计、性能、测试、MyBatis/ORM、事务边界、SQL/DDL质量 多维度评分 - 代码质量评分 Review报告生成 - 输出结构化报告 何时使用此技能 用户需要进行代码评审 用户需要理解变更的业务含义 用户需要生成完整PRD文档 用户需要评分和质量评估 用户说 "review代码" / "检查PR" / "代码review" / "检查下代码" 第1步:Git Diff 变更获取 1.1 确定基准分支
优先询问用户,如用户未指定则使用以下策略:
当前分支有上游跟踪 → 使用 @{u}(上游分支) 存在 develop 分支 → 使用 develop 存在 mAIn/master 分支 → 使用 mAIn/master 否则 → 使用 HEAD~10(最近10次提交) 1.2 获取变更 # 场景1:工作区+暂存区 vs 基准分支(最常用) git diff <基准分支>..HEAD --name-only git diff <基准分支>..HEAD -U500 git diff <基准分支>..HEAD --stat
# 场景2:仅检查已暂存(staged)的变更 git diff --缓存d -U500 git diff --缓存d --stat
# 场景3:工作区未暂存变更 git diff -U500
1.3 收集信息 新增的文件(新增功能) 修改的文件(功能修改) 删除的文件(功能删除) 变更行数统计 第2步:完整上下文分析 2.1 确定入口点
对于每个变更的方法/类,向上追溯找到业务入口:
控制器层的HTTP入口(@PostM应用ing/@获取M应用ing) 服务层的业务入口方法 MQ消息入口(@Rabbit列出ener/@Kafka列出ener) 定时任务入口(@Scheduled) 外部API入口(Feign 命令行工具ent) 2.2 追踪方法链
使用 lsp_find_references 分析每个关键方法:
入口点 ↓ 调用 变更方法 ↓ 调用 子方法1 → 子方法2 → ... → 数据库/外部服务
2.3 业务逻辑推断
基于完整链路推断业务逻辑:
变更方法:Inventory服务.deduct()
完整链路: 控制器.创建Order() [下单入口] ↓ Order服务.创建() [订单创建] ↓ Inventory服务.deduct() [变更点] ← 库存扣减 ↓ Payment服务.pay() [支付] ↓ Notification服务.通知() [通知]
推断业务需求: 用户下单 → 自动扣减库存 → 支付 → 通知 核心流程:订单+库存+支付+消息 四模块联动
第3步:PRD文档生成(核心能力)
重要:PRD必须覆盖所有变更点,包括新增功能和修改功能。
3.1 PRD文档结构 # 产品需求文档 PRD
1. 概述
1.1 产品名称
[模块名称-版本号]1.2 需求背景
[为什么需要这个功能,解决什么问题]1.3 需求范围
- 涉及模块:xxx
- 用户类型:xxx
- 使用场景:xxx
2. 功能需求
2.1 功能清单
| # | 功能点名称 | 功能类型 | 优先级 | 涉及文件 | 行号 |
|---|---|---|---|---|---|
| 1 | 功能点A | 新增 | P0 | Xxx服务.java | 1-100 |
| 2 | 功能点B | 新增 | P1 | Xxx服务Impl.java | 200-300 |
| 3 | 功能点C | 修改 | P2 | Xxx转换器.java | 10-30 |
| 4 | 字段调整 | 修改 | P2 | DDL脚本 | - |
2.2 功能详情(每个变更点都需要详细描述)
2.2.1 [功能点A-新增功能]
功能类型:新增
功能描述: [详细描述这个功能做什么]
业务规则:
- 规则1
- 规则2
核心链路:
[入口] 控制器.method() [POST /API/xxx] ↓ 服务.method() [核心] 核心业务逻辑 ← 变更内容 ↓ DAO.method() [终点] 数据库/外部服务
入参说明:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| param1 | String | 是 | xxx |
| param2 | Integer | 否 | xxx |
| 参数 | 类型 | 说明 |
|---|---|---|
| 结果1 | String | xxx |
| 异常场景 | 错误码 | 提示信息 |
|---|---|---|
| 场景1 | E_xxx | xxx |
2.2.2 [功能点B-修改功能]
功能类型:修改
涉及文件:xxx.java
涉及行号:xxx-xxx
修改前:
``java
// 原代码
修改后:
// 新代码
变更原因: [为什么要这样修改]
核心链路:
[入口] 控制器.method() [POST /API/xxx]
↓ 服务.method()
[核心] 修改的方法 ← 变更内容
↓ DAO.method()
[终点] 数据库/外部服务
影响分析:
影响的上游:xxx
影响的下游:xxx
兼容性:是否向前兼容
数据库:是否需要迁移
2.2.3 [功能点C-优化功能]
功能类型:优化
优化前: [优化前的描述]
优化后: [优化后的描述]
优化效果:
性能提升:xxx%
代码改进:xxx
数据库变更
3.1 新增表
创建 TABLE xxx (
id VARCHAR(36) PRIMARY KEY,
tenant_id VARCHAR(32) NOT NULL,
org_id VARCHAR(32),
doc_id VARCHAR(36) NOT NULL,
retry_type VARCHAR(32),
retry_count INT DEFAULT 0,
last_retry_time DATETIME,
创建_time DATETIME NOT NULL,
PRIMARY KEY (id),
KEY idx_doc_id (doc_id)
) ENGINE=InnoDB DEFAULT CHAR设置=utf8mb4 COMMENT='xxx表';3.2 修改表
-- 修改字段长度
ALTER TABLE xxx MODIFY COLUMN goods_name VARCHAR(300) COMMENT '商品名称';
-- 新增字段
ALTER TABLE xxx 添加 COLUMN operator VARCHAR(300) COMMENT '操作人';
3.3 数据迁移
[如有数据迁移需求,描述迁移脚本]
- 接口设计
4.1 新增接口
接口名称 请求方式 路径 说明
接口A POST /API/xxx xxx请求参数:
{
"ids": ["xxx"],
"operator": "xxx"
}
响应参数:
{
"code": "0",
"message": "成功",
"data": null
}
4.2 修改接口
接口名称 请求方式 路径 说明
接口A POST /API/xxx 参数调整
变更说明: [描述接口参数变更]
- 涉及的代码变更
5.1 新增文件
文件路径 说明
xxx.java 新增功能
5.2 修改文件
文件路径 修改内容
xxx.java 方法A新增、方法B修改
5.3 删除文件
文件路径 删除原因
xxx.java 功能废弃
- 非功能需求
6.1 性能要求
响应时间:< xxx ms
并发能力:xxx TPS
6.2 安全要求
权限校验:是/否
数据加密:是/否
6.3 兼容性要求
向前兼容:是/否
多数据库支持:MySQL/Oracle/PostgreSQL
- 测试要点
7.1 功能测试
测试点1
测试点2
7.2 异常测试
测试点1
测试点2
7.3 边界测试
测试点1
测试点2
7.4 回归测试
测试点1(确认原有功能不受影响)
测试点2
- 上线注意点
注意点1
注意点2
- 变更记录
版本 日期 变更内容 作者
v2.4.0.0 2026-04-30 初始版本 xxx
第4步:代码检测(P0/P1快速扫描)
在进入细粒度审查前,先快速扫描严重缺陷和代码缺陷。
P0严重缺陷
检查项 检测模式 扣分 空指针 $OBJ.$METHOD() obj未检查 -10 SQL注入 "SELECT " + $TABLE 直接拼接 -10 密钥泄露 password/令牌 = "xxx"` -10 事务缺失 @Transactional 关键方法无事务 -10
P1代码缺陷
检查项 检测模式 扣分 资源泄漏 new File输入流 未关闭 -5 线程安全 private static 共享变量 -5 空catch catch块为空或仅打印日志 -5 循环查询 for循环内数据库操作 -5
P2代码规范(快速扫描)
以下为不与第5步细粒度审查清单重叠的独立检查项:
检查项 检测模式 扣分 参数过多 方法参数超过3个 -2 魔法数字 字面量未定义为常量 -2 原始泛型 列出/Map 未指定类型参数 -2
注意:流s滥用、Boolean参数、Optional.获取()、equals缺哈希Code、catch 异常 等 P2 检查项已整合到第5步对应分类中,此处不再重复。
第5步:细粒度代码审查清单 (DetAIled Review 检查列出)
审查策略
- Quick 扫描 - 理解变更意图,确定审查范围
- 检查列出 pass - 按以下分类逐项检查