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

posted @ 2020-06-28 21:50  蓝天随笔  阅读(1187)  评论(0编辑  收藏  举报