2

我正在阅读 Instrumentation API 文档和在 web.xml 中找到的大量示例。但是我仍然不明白我可以对使用 Instrumentation API 的类做什么样的事情?我是否认为在加载类之前我可以进行任何我想要的转换(添加新字段、删除、添加方法),但是一旦加载,我只能更改方法主体?

谢谢。

4

1 回答 1

1

允许哪些更改取决于 JVM。通常,您需要保持公共 API 和所有字段相同。您可以更改代码。

来自http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html#retransformClasses%28java.lang.Class...%29

重新转换可能会改变方法体、常量池和属性。重新转换不得添加、删除或重命名字段或方法,更改方法的签名或更改继承。这些限制可能会在未来的版本中取消。在应用转换之前,不会检查、验证和安装类文件字节,如果结果字节有误,此方法将引发异常。

于 2012-06-15T07:30:25.747 回答