通过前两节,了解了javaagent相关的知识,无论静态agent还是动态agent都可以在对应用无侵入的情况下实现对应用的监控(拦截),那么我们拦截应用的执行有什么用呢?答案是可以实现应用的监控,对类字节码的修改,动态代理等等,如果要修改类字节码则需要一个工具,这个工具就是javassist
Javassist是一个开源的分析、编辑和创建Java字节码的类库。其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成
javassist使用
关于javassist直接通过代码注释方式来理解,他的主要功能是可以动态构建一个新类,或者修改已经存在的类的相关属性(成员变量,构造方法,普通方法),使用之前先引入相关jar包
动态创建类
下面是使用javassist创建一个类的实例相关api使用都已在代码中注释
若将该类生成到文件中,可以得到Student.class文件,将该文件反编译可得到如下图片结果,正是我们所创建的类
动态修改类方法
用于被修改的类
使用javassist修改类实例代码如下:
javassist执行流程图和UML类图
执行流程图:
类图:
javassist特殊符号说明及注意点
注意点:
参考博客
Java学习之javassist
Java动态编程之javassist
鲁班大师pdf文档