我正在尝试将一些代码添加到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

09-05 21:05