大家好,我是你们的 Java 老司机!今天咱们玩点高级的------用 Spring AI 实现 MCP(Mean Code Patrol,代码平均巡逻员),让 AI 自动检查代码质量、优化性能,甚至帮你写单元测试!
MCP 是什么?
- 代码风格检查(比如命名不规范、魔法数字)
- 性能优化建议 (比如
String
拼接改用StringBuilder
) - 自动生成单元测试 (再也不用自己写
@Test
了) - 安全漏洞扫描(防止 SQL 注入、XSS 等)
技术栈:
- Spring AI(调用 DeepSeek/GPT 分析代码)
- Spring Boot(提供 REST API)
- GitHub API(可选,实现 CI/CD 集成)
1. 项目初始化(SpringBoot + Spring AI)
(1) 创建项目
用 Spring Initializr 生成项目,选择:
- Spring Boot 3.2+
- Spring AI(集成 DeepSeek)
pom.xml 关键依赖:
xml
<dependencies>
<!-- SpringBoot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI (DeepSeek) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-deepseek</artifactId>
<version>0.8.0</version>
</dependency>
<!-- 代码解析(可选) -->
<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.30.0</version> <!-- 用于解析 Java 代码 -->
</dependency>
</dependencies>
(2) 配置 DeepSeek
在 application.yml
中:
yaml
spring:
ai:
deepseek:
api-key: "你的-DeepSeek-API-KEY"
chat:
model: deepseek-chat
temperature: 0.3 # 保守模式,减少 AI 瞎编
2. 核心功能实现
(1) 代码分析服务
创建一个 CodeAnalysisService
,让 AI 检查代码质量:
java
import org.springframework.ai.chat.ChatClient;
import org.springframework.stereotype.Service;
@Service
public class CodeAnalysisService {
private final ChatClient chatClient;
public CodeAnalysisService(ChatClient chatClient) {
this.chatClient = chatClient;
}
public String analyzeCode(String code) {
String prompt = """
请分析以下 Java 代码的质量,并给出改进建议:
要求:
1. 检查代码风格(命名、注释、魔法数字等)
2. 检查性能问题(如字符串拼接、循环优化等)
3. 检查潜在的安全风险(如 SQL 注入、XSS)
4. 用 Markdown 格式返回结果
代码:
```java
%s
```
""".formatted(code);
return chatClient.call(prompt);
}
}
测试:
java
String badCode = """
public class BadCode {
public String getUser(int id) {
String sql = "SELECT * FROM user WHERE id = " + id; // SQL 注入风险!
return jdbcTemplate.query(sql);
}
}
""";
String review = codeAnalysisService.analyzeCode(badCode);
System.out.println(review);
AI 返回示例:
markdown
### 代码质量分析报告
1. **安全问题**
- 🚨 SQL 注入风险:直接拼接 SQL 查询,应改用 `PreparedStatement`
2. **代码风格**
- 方法名 `getUser` 符合规范,但缺少注释
3. **性能优化**
- 无显著性能问题
(2) 自动生成单元测试
让 AI 帮你写 JUnit 测试:
java
public String generateUnitTest(String code) {
String prompt = """
请为以下 Java 代码生成 JUnit 5 单元测试:
要求:
1. 使用 Mockito 模拟依赖
2. 覆盖主要逻辑分支
3. 包含断言
代码:
```java
%s
```
""".formatted(code);
return chatClient.call(prompt);
}
输入:
java
public class Calculator {
public int add(int a, int b) { return a + b; }
}
AI 生成结果:
java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
@Test
void testAdd() {
Calculator calc = new Calculator();
assertEquals(3, calc.add(1, 2));
assertEquals(-1, calc.add(1, -2));
}
}
(3) 集成 GitHub(可选)
通过 GitHub Webhook 实现 PR 自动审查:
java
@RestController
@RequestMapping("/github")
public class GitHubController {
@PostMapping("/webhook")
public void handlePR(@RequestBody GitHubPullRequestEvent event) {
String diffUrl = event.getPullRequest().getDiffUrl();
String diff = fetchDiff(diffUrl); // 获取代码变更
String review = codeAnalysisService.analyzeCode(diff);
postComment(event.getPullRequest().getCommentsUrl(), review); // 提交审查意见
}
}
3. 前端展示(简易版)
用 Thymeleaf 做个简单界面:
java
@Controller
public class MCPController {
@GetMapping("/")
public String index() { return "index"; }
@PostMapping("/analyze")
public String analyze(@RequestParam String code, Model model) {
model.addAttribute("report", codeAnalysisService.analyzeCode(code));
return "result";
}
}
index.html
(表单提交代码):
html
<form action="/analyze" method="post">
<textarea name="code" rows="10" cols="80"></textarea>
<button type="submit">分析代码</button>
</form>
result.html
(展示 AI 报告):
html
<div th:utext="${report}"></div> <!-- 渲染 Markdown -->
4. 部署与优化
(1) 缓存优化
避免重复分析相同代码:
java
@Cacheable("codeReviews")
public String analyzeCode(String code) { ... }
(2) 限流保护
防止 API 被刷爆:
java
@RateLimiter(value = 10, timeUnit = TimeUnit.SECONDS) // 10 秒内限流
public String analyzeCode(String code) { ... }
(3) 异步处理
长时间任务改用异步:
java
@Async
public CompletableFuture<String> analyzeLargeCode(String code) { ... }
5. 总结
实现的功能:
✅ 代码质量分析 (风格、性能、安全)
✅ 自动生成单元测试
✅ GitHub 集成(PR 自动审查)
扩展方向:
- IDE 插件(实时提示代码问题)
- CI/CD 流水线(检查不通过则阻塞部署)
- 自定义规则引擎(结合 Checkstyle/PMD)
最后提醒:
- AI 审查结果需人工复核,别让它乱改生产代码
- 敏感代码勿上传,防止泄露商业逻辑
- 如果 AI 吐槽你代码太烂...... 请冷静,它说的可能是真的