系统依赖
系统开发,随着功能不断完善,体量渐渐增大,分模块抽象,复用工具等;涉及复杂的业务逻辑的时候,也会引入外部服务,外部工具;业务开发追求的是功能的完整性和快速迭代,但是在分析系统可用性可靠性的时候,我们往往需要找到一些系统的薄弱点,及被依赖点
依赖排查
在java开发中,最细粒度的依赖就是方法级依赖,有了方法级依赖,就可以拓展到系统,平台级依赖
大多数时候,我们都是靠撸代码来找出方法间的依赖,这样耗费人力物力,还容易遗漏,当然开源界也有不少的成型的工具来做这方面的工作
asm解析
用asm只需要写简单的几行代码就可以做到方法级别的依赖梳理,asm是一个字节码框架,它读取.class文件,并对类字节码文件结构进行解析,同时还提供一些扩展的方式来定制我们想要的类结构信息
1.定义“方法”对象结构
/**
* 存储类名,方法名,方法描述,及方法内部调用过的方法
*/
public class MethodInfo {
String cname;
String mname;
String descripter;
List<MethodInfo> invokeInfo = new ArrayList<MethodInfo>();
public MethodInfo(String cname, String mname, String descripter) {
this.cname = cname;
this.mname = mname;
this.descripter = descripter;
}
public void addInvoke(MethodInfo invoke) {
invokeInfo.add(invoke);
}
public List<MethodInfo> getInvoke() {
return invokeInfo;
}
public String getClasz() {
return Type.getType("L" + cname + ";").getClassName();
}
public String getMethod() {
Type retType = Type.getReturnType(descripter);