har*_*ani 5 java reflection dependency-management
我计划获取在一个程序包(CommonPackage)中定义的方法的列表,该方法由另一个程序包(ServicePackage)中定义的类调用。为此,我需要检索给定的方法代码并获取在此类之外调用的方法。
我已经研究了Java反射,却找不到任何解决方案。我还介绍了如何从C#中使用反射的方法获取调用的方法列表,并且无法找到专门针对JAVA的任何最终解决方案。
ClassA {
private ClassB classB;
public methodA1(){
classB.methodB1();
}
}
ClassB {
public methodB1(){
// Some code
}
}
Run Code Online (Sandbox Code Playgroud)
预期:对于ClassA.MethodA1,我们获得其中调用的方法的列表。输出:ClassB.MethodB1
我使用了一个名为Javassists的开源字节码操纵器,它已经有一个 API 来获取给定方法中进行的方法调用。它还具有获取代码属性的方法,该属性可以为您提供给定方法中的行数。
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
import javassist.expr.ExprEditor;
import javassist.expr.MethodCall;
public static void main(String[] args)
{
ClassPool cp = ClassPool.getDefault();
CtClass ctClass = null;
try {
ctClass = cp.get(className);
} catch (NotFoundException e) {
throw new RuntimeException(e);
}
CtMethod ctMethod = ctClass.getMethod(methodName);
ctMethod.instrument(
new ExprEditor() {
public void edit(MethodCall calledMethod) {
System.out.println("Method "+ calledMethod.getMethod().getName() + " is called inside "+methodName);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |