我需要在已编译的Java类中添加新的方法(实际上是覆盖现有继承的方法)。我可以通过使用Instrumentation(#retransformClasses()
)和Javassist(#insertAfter()
)来修改超类中的方法。不幸的是,这将改变该超类的所有子类的行为,但我只希望更改一个特定的类。
我可以看到Javaassist具有#addMethod()
功能(并且确实有效),但是如何将生成的字节码注入JVM?
Java.Instrumentation #retransformClasses()
和#redefineClasses()
方法在javadocs中都明确指出:
...重定义不得添加,删除或重命名字段或方法...