当我尝试查找使用Javaagent的示例时,在大多数情况下,它们是使用字节码的示例。这些示例使用第三方库,例如Javaassist。

据我所知,Java中没有使用字节码的标准方法,在任何情况下,您都必须求助于这些库。

因此,在调用defineClass()之前,我尝试在自己的自定义类加载器中使用这些库。而且,当然,它运行得很好。我可以用相同的方式更改字节码,就像使用ClassFileTransformertransform()方法一样。

我是否正确理解Javaagents的另一个有用功能,那就是它们的主要功能?因为首先,javaagent给您提供了一个Instrumentation对象,并且Java规范说instrument包主要用于处理字节码。但是,如果我只能实现自己的类加载器(为什么在引入instrument包之前很久就可以做到),为什么还要这样做呢?

最佳答案

Instrumentation API可以在运行时使用,而无需触摸代码或编译后的字节码。您可以检测每个已编译的Java程序(即使没有代码也可以)。

关于java - Javaagent。做什么的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18962239/

10-10 19:37