这个项目提供了一个基于 JavaParser 的静态分析器,用于识别:
- 外部依赖 Bean(源码中没有定义、或在 Spring XML 中配置为外部类的 Bean)。
- 某个方法是否对外部 Bean 存在强依赖(方法内直接调用外部 Bean)。
- 强依赖在调用链中的向上传播(callee 强依赖会传播给 caller)。
- 最终暴露接口(HTTP Controller + Thrift 服务)是否对外部 Bean 强依赖。
- HTTP:
@RestController/@Controller下的@RequestMapping/@GetMapping/...方法。 - Thrift:
- 类注解包含
@ThriftService/@ThriftController;或 - 类实现接口名以
Iface结尾(如 Thrift 生成代码中的XXX.Iface)。
- 类注解包含
分析器会解析扫描目录下的 .xml,识别 <bean> 与 <property ref="...">:
- 如果
property引用的目标 bean class 是源码内类,则把该字段当作内部依赖参与调用链传播; - 如果目标 bean class 不在源码内,则记为外部依赖 Bean(例如 Thrift 客户端)。
mvn test
mvn -q exec:java -Dexec.mainClass=com.analysis.analyzer.AnalyzerApplication -Dexec.args="src/test/resources/sample"默认扫描 src/main/java,你也可以在命令行传入任意源码目录。
- 目前使用简单类名匹配,未引入完整类型解析。
- 对重载方法使用「方法名 + 参数个数」进行匹配。
- XML 目前只覆盖常见
<bean class=...>+<property name=... ref=...>形式。