ha9*_*3ar 2 java instrumentation javaagents
我使用Instrumentation#redefineClasses(ClassDefinition)method 重新加载了我的测试应用程序类。当我尝试在类文件中添加新方法并从现有方法中调用它时。我这样做并不高兴。但是,当我调用某些现有方法和其他Java Built-In Library方法时,它运行良好。
我的问题是-Oracle或Open JDK实现是否知道/认识到此限制?我怀疑即使您可以使用INstrumentation Manifest.MF文件重新定义/重新转换类,也必须对它的使用范围有一定的限制。
有人对此事有经验吗?
来自Instrumentation.html#redefineClasses:
重新定义可能会更改方法主体,常量池和属性。重定义不得添加,删除或重命名字段或方法,更改方法的签名或更改继承。这些限制可能会在将来的版本中取消。在应用转换之后,才会检查,验证和安装类文件字节,如果结果字节错误,则此方法将引发异常。
因此,答案是否定的,这是不可能的。