如何使用字节码操作为现有类添加新方法?

时间:2019-06-19 17:36:16

标签: java bytecode instrumentation javassist javaagents

我需要在已编译的Java类中添加新的方法(实际上是覆盖现有继承的方法)。我可以通过使用Instrumentation(#retransformClasses())和Javassist(#insertAfter())来修改超类中的方法。不幸的是,这将改变该超类的所有子类的行为,但我只希望更改一个特定的类。

我可以看到Javaassist具有#addMethod()功能(并且确实有效),但是如何将生成的字节码注入JVM?

Java.Instrumentation #retransformClasses()#redefineClasses()方法在javadocs中都明确指出:

  

...重定义不得添加,删除或重命名字段或方法...

0 个答案:

没有答案