运行前增强
- 通过MANIFEST.MF配置文件指定premain方法对应的类位置,属性名叫Premain-Class
- premain方法里通过Instrumentation接口添加一个ClassFileTransformer的自定义实现类
instrumentation.addTransfomer(xxTransfomer);
- ClassFileTransformer实现类里可以通过第三方字节码增强工具包来修改业务类的字节码
- 启动目标Java程序时,增加启动命令 -javaagent:"xxx"
运行时增强
- 通过MANIFEST.MF配置文件指定agentmain方法对应的类位置,属性名叫Agent-Class
- agentmain方法里通过Instrumentation接口添加一个ClassFileTransformer的自定义实现类
instrumentation.addTransfomer(yyTransfomer, true);
- 设置可以被重复修改的类信息
instrumentation.retransformClasses(Class.formName("aaaa");
- ClassFileTransformer实现类里可以通过第三方字节码增强工具包来修改业务类的字节码
- 启动目标Java程序,进程PID为3547
- 启动另一个任意Java程序,该程序代码里通过VirtualMachine类的attach方法获取进程3547的jvm
- 执行VirtualMachine的loadAgent方法