Asm

2024-06-26

ASM介绍

ASM是一个Java字节码操纵框架,能用来动态生成类或者增强既有类的功能 ASM可以直接产生二进制class文件,也可以在类被加载入Java虚拟机之前动态改变类的行为,Java class被存储在严格格式定义的.class文件里,这些类文件拥有足够的元数据来解析类中的所有元素: 类名称,方法,属性以及Java字节码(指令),ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类

官网 https://asm.ow2.io/javadoc/index.html maven坐标

使用ASM框架需要先导入对应的jar:

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>8.0</version>
</dependency>

ASM框架中的核心类有以下几个:

  • ClassReader: 该类用来解析编译过的class字节码文件
  • ClassWriter: 该类用来重新构建编译后的类,比如修改类名,属性以及方法,甚至可以生成新的类的字节码文件
  • ClassAdapter: 该类也实现了ClassVisitor接口,他将对它的方法调用委托给另一个ClassVisitor对象

asm字节码处理流程

目标类 class bytes–>Class Reader 解析–>ClassVisitor增强修改字节码–》ClassWriter生成增强后的class bytes–>通过instrumentation 解析加载为新的class

origin class –> asm ClassReader—>asm ClassVisitor—>asm ClassWriter—>增强 class bytes –>Java Instrumentation—>target class