当我尝试查找使用 Javaagent 的示例时,在大多数情况下,它们都是使用字节码的示例。这些示例使用第三方库,例如 Javaassist。
据我所知,Java 中没有使用字节码的标准方法,无论如何您都必须求助于库。
所以,我尝试在我自己的自定义类加载器中使用这些库,然后再调用defineClass()
. 而且,当然,它运行得非常好。我可以用同样的方式改变字节码,就好像我会用ClassFileTransformer
'stransform()
方法一样。
我是否正确理解 javaagents 的另一个有用特性,而这又是它们的主要特性?因为,首先,javaagent 为您提供了一个Instrumentation
对象,而 Java 规范说该instrument
包主要用于处理字节码。instrument
但是,如果我可以实现我自己的类加载器(在引入包之前我可以做的事情),我为什么需要这样做呢?