Java - 是bytebuddy代理,能够“完全”重新定义一个类吗?

时间:2018-01-08 11:19:12

标签: instrumentation byte-buddy attach-api

byte-buddy代理能否克服Attach API限制,例如“新方法定义”,“静态变量变化”?我可以看到正在从Agent Builder调用redefineClasses方法,但不确定它是否也遵循与附加API相同的限制。

我试图了解我是否可以执行以下操作:

1)使用应用程序类加载器加载代理jar,例如ParallelWebappClassLoader。我的应用程序是一个servlet webapp,在运行时它使用上面的类加载器来加载所有应用程序类。

2)完全重新定义我的类,即任何方法添加/更新和静态/局部变量更改/更新/添加。

我确实有一个当前在Attach API限制内工作的代理,但我很难将类加载从System Class Loader委托给应用程序。

非常感谢,

1 个答案:

答案 0 :(得分:1)

这是您正在运行的Java虚拟机的限制。 Byte Buddy有能力完全重新定义"通过使用其API的类,但大多数VM将拒绝此类更改。请查看dynamic code evolution VM是否可以应用此类更改。