首页 > 解决方案 > 如何使用字节码操作向现有类添加新方法?

问题描述

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

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

Java.Instrumentation#retransformClasses()#redefineClasses()方法都在 javadocs 中清楚地说明:

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

标签: javabytecodeinstrumentationjavassistjavaagents

解决方案


推荐阅读