我正在尝试将一些代码添加到jar(依赖maven)内部的类中,并且我通过以下方式进行操作:
ClassPool classPool = ClassPool.getDefault();
CtClass ctClass = classPool.get("xyz.abc.ClassInADependecy");
CtMethod method = ctClass.getDeclaredMethod("getSomeValue");
method.insertBefore("{ System.out.println(\"modified\"); }");
我正在使用Spring,并且上面的代码是使用 @Configuration 注释调用的。
当我调用方法getSomeValue 时,什么也不会打印。
您能帮我找出我做错了什么吗?
非常感谢你。
最佳答案
您只需更改实现,因为它以Javassists类型池表示。您必须确保相应的类加载器也加载了该类。另外,这必须在第一次加载该类之前发生,即在您的Spring应用程序加载该类之前。
一种方法是从Java代理操作类:https://docs.oracle.com/javase/7/docs/api/java/lang/instrument/package-summary.html