我一直在使用 premain()
和 addTransformer()
。因为,当我使用服务器运行代理时,它会为某些类提供 javassist.ClassNotFound
异常,所以我想尝试使用 agentMain()
和 redefineClasses()
。我浏览了很多链接,但到目前为止我找不到一段代码可以让我清楚地了解如何使用这两种方法设置一个简单的 java 代理。一些帮助将非常感激。
我们可以将 redefineClasses()
与 premain()
一起使用吗? (当我们使用redefineClasses()
时,我们还需要transform
方法吗?)
我正在尝试检测一组类的方法,其中我知道这些类的完全限定名称为com.test.Foo
。我想在不检查加载到 JVM 上的整套类的情况下对它们进行检测。我一直在来回阅读这些文档,但我仍然无法清楚地了解如何使用该 redefineClasses
方法?
最佳答案
您可以调用redefineClasses
从任何地方,也可以从 premain
方法只不过是对 main
之前由同一 JVM 进程运行的普通 Java 程序的扩展。方法。
运行重新定义的一个简单示例是:
instrumentation.redefineClasses(new ClassDefinition(Foo.class, new byte[] {...}));
这边,Foo
设置为由字节数组表示,该数组必须包含 Foo
的有效类文件其中字段和方法的所有签名与加载的 Foo.class
相同。您可以使用 ASM 等工具来检测类。
如果你真的只想检测Foo
,那么这可能就是替代使用 ClassFileTransformer
的方法。 .
关于java - 我如何在javaagents中使用redefineClasses()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33034001/