Spring Method Agent:一款无侵入的Spring方法级调试神器
🎯 工具简介
Spring Method Agent 是一款面向Java开发者的高效调试工具,能够以零代码侵入的方式对Spring项目进行方法级别的测试和调试。通过Java Agent技术,在Spring应用启动时进行增强,无需修改任何业务代码即可实现方法的可视化查询与调用。
✨ 核心特性
- 无代码侵入:基于Java Agent实现,对应用完全透明
- 可视化操作:内置Web界面,直观查看和调用Spring Bean方法
- 方法Mock支持:无需修改代码即可模拟方法返回值
- 条件Mock:支持基于条件的智能Mock规则
- 多数据类型:支持JSON、对象、数组、基本类型等多种返回值
- 灵活配置:支持动态配置和规则管理
🚀 快速开始
1. 下载安装
2. 配置启动参数
bash
-javaagent:{your path}/spring-method-agent-2.0.0.jar
3. 启动应用
应用启动后,工具会监听8100端口 (可通过-Dagent.port=8080修改)
4. 访问界面
arduino
http://localhost:8100
🔧 Mock功能介绍
启用Mock
ini
-Dsma.mockEnable=true
-Dsma.configPath=/yourPath/sma-mockConfig
配置文件示例
json
{
"globalEnabled": true,
"rules": [
{
"className": "org.example.controller.EchoController",
"methodName": "echo",
"conditionField": "url",
"conditionValue": "hello",
"mockReturnValue": "lin",
"enabled": true
},
{
"className": "org.example.controller.EchoController",
"methodName": "user",
"conditionField": "user.name",
"conditionValue": "bob",
"mockReturnValue": {
"age": 18,
"name": "bob"
},
"enabled": true
}
]
}
支持的数据类型
- 字符串:
"mockReturnValue": "lin" - 数字:
"mockReturnValue": 3.14 - 布尔值:
"mockReturnValue": true - 对象:
"mockReturnValue": { "age": 18, "name": "bob" } - 数组:
"mockReturnValue": [1, 2, 3] - JSON字符串:
"mockReturnValue": "{ "items": [1,2,3], "count": 3 }"
📊 应用场景
1. 快速调试
无需编写测试代码,直接在Web界面调用任意Spring Bean方法,查看返回结果。
2. 集成测试
在联调阶段模拟依赖服务的响应,无需启动完整的依赖链。
3. 问题排查
生产环境问题复现时,可以临时Mock方法返回值,快速定位问题。
4. 演示展示
在演示时Mock特定数据,避免依赖外部服务的不稳定性。
🎨 使用示例
场景一:条件Mock
当用户名为"bob"时,返回预设的用户信息:
json
{
"className": "org.example.controller.UserController",
"methodName": "getUserInfo",
"conditionField": "user.name",
"conditionValue": "bob",
"mockReturnValue": {
"id": 1,
"name": "bob",
"role": "admin"
}
}
场景二:异常模拟
json
{
"className": "org.example.service.PaymentService",
"methodName": "processPayment",
"conditionField": "amount",
"conditionValue": 10000,
"mockReturnValue": {
"error": "余额不足",
"code": "INSUFFICIENT_BALANCE"
}
}
🔄 配置参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
className |
完整类名(全限定名) | 必填 |
methodName |
要Mock的方法名 | 必填 |
conditionField |
条件字段路径(可选) | 可选 |
conditionValue |
条件匹配值(可选) | 可选 |
mockReturnValue |
Mock返回值 | 必填 |
enabled |
规则开关 | true |
globalEnabled |
全局Mock开关 | true |
⚡ 性能优势
- 低开销:仅在方法调用时进行匹配检查
- 按需加载:Mock规则可动态配置
- 精准匹配:支持条件匹配,避免不必要的Mock开销
📈 对比传统方案
| 方案 | 代码侵入 | 维护成本 | 灵活性 | 学习成本 |
|---|---|---|---|---|
| 传统单元测试 | 高 | 高 | 低 | 高 |
| Mock框架 | 中 | 中 | 中 | 中 |
| Spring Method Agent | 无 | 低 | 高 | 低 |
🤝 贡献与反馈
该项目已在GitHub开源,欢迎提交Issue和PR: GitHub项目地址
💡 使用建议
- 开发环境:长期启用,提升开发效率
- 测试环境:用于集成测试和场景模拟
- 生产环境:仅用于紧急问题排查,建议谨慎使用
通过这个工具,开发者可以节省大量 的测试代码编写时间,提升调试效率,让Spring应用的调试和测试变得更加简单高效。立即尝试,体验无侵入式调试的魅力!