Java Instrumentation (参考:http://www.ibm.com/developerworks/cn/java/j-lo-jse61/

简介:

使用Instrumentation,开发者可以构建独立于应用程序的代理程序,用来检测和协助运行在JVM上的程序,甚至能够替换和修改某些类的定义

遇到问题:

运行在tomcat容器中的应用程序,由于main方法是在Bootstrap.jar中容器启动时执行的,

Agent-class方式在替换的方法中只获取到tomcat相关jar包中的一些类:

java instrumentation &JVMTI

上图中是在transform方法中打印出来的,这个方法会在二中介绍

具体介绍:

下面是两种方式PreMain 和 agentMain,分别为main函数执行之前,和执行之后的操作

一:PreMain

main函数执行之间,扫描判断特定的类,然后以字节数组的方式加载代理类的字节码文件,替换目标类:

示例代码:

public class TransClass {
    public int getNumber() {
        return 2;
    }
}
TransClass

相关文章: