Java探针
一、场景
JavaAgent Java代理,又叫java探针,可以动态的改变加载的字节码文件
通常使用ASM Javasist字节码工具修改class文件
二、使用
2种方式
静态方式: 通过-javaagent 指定代理类 (在main方法执行前执行premain方法)
动态方法:通过额外的进程attach到指定的java进程中(agentMain)
具体使用不详解 (JVM级别的AOP)
三、常用接口
加载前修改class
Instrumentation.addTransformer
加载后修改class
Instrumentation.redefineClasses
限制:
- 父类是同一个
- 实现的接口数也要相同,并且是相同的接口
- 类访问符必须一致
- 字段数和字段名要一致
- 新增的方法必须是 private static/final 的
- 可以删除修改方法
参考:https://www.infoq.cn/article/javaagent-illustrated