JavaAgent
简介
JDK1.5以后引入的拦截器,也叫java代理,拦截的是main方法,方法名叫premain,也就是在main方法之前执行;JDK1.6之后叫agentmain。agent技术它是独立于应用程序的代理程序,可以在虚拟机加载主线程之前做一些AOP的功能,对class字节码文件做一些修改操作。
上Demo运行体验
1、在IDEA中新建一个项目
2、项目创建成功后,在一个类中,实现premain方法代码,从字面意思理解,就是在main之前运行的方法,premain有两个重载方法,系统会优先加载参数有Instrumentation的premain方法
3、在 src 目录下生成 META-INF/MANIFEST.MF 文件,File->Project Structure->Artifacts Create JAR from Modules,选择copy to the ...
修改MANIFEST.MF的Premain-Class,且下面有一行空行
4、需要把AgentTest项目打出jar包,Build->Build Artifacts...,生成agent的jar包在out/artifacts目录下
5、在新建一个java Module项目,然后写main函数,把刚才打的AgentTest.jar包放入libs目录
此时运行main方法,结果如下
然后再配置一下参数,Run->Edit Configurations,VM options参数
-javaagent:F:\ASWorkSpace\SnifferDogProject\AgentTest\myMain\libs\AgentTest.jar=Hello -javaagent:F:\ASWorkSpace\SnifferDogProject\AgentTest\myMain\libs\AgentTest.jar=World
再次运行main函数,结果如下,premain会在main方法之前执行
6、也可以使用java命令行执行,使用-javaagent指定agent代理包路径,-jar指定main方法包路径
java -javaagent:F:\ASWorkSpace\SnifferDogProject\AgentTest\myMain\libs\AgentTest.jar=HelloWorld -jar F:\ASWorkSpace\SnifferDogProject\AgentTest\myMain\libs\myMain.jar
运行结果如下: