asm操作字节码学习3:asm的主要api

上一篇说到如何用asm操作一个类.本文将介绍,更多关于类操作的内容.

用asm操作类,因为asm提供了两种api,core与tree,所以需要分别熟悉这两种api.相关的文章也很多,这里作一个总结式的介绍.

1.core api

上文使用的是core api,它的主要类有:

AnnotationVisitor	访问注解
Attribute	java虚拟机中定义的非标准类,属性,方法
ByteVector	动态扩展的向量类型
ClassReader	解析类结构的访问器
ClassVisitor 访问类的访问器
ClassWriter	生成类结构的访问器
ConstantDynamic	运行时常量
FieldVisitor	属性访问器
Handle	属性或方法引用
Label	方法所在的字节码位置
MethodVisitor	方法访问器
ModuleVisitor	java模块访问器
RecordComponentVisitor	访问组件用的
Type 属性或方法的类型
TypePath	类型参数的路径,通配符边界,数组元素类型或静态内部类型
TypeReference	类,方法,属性的类型引用声明
常用的有ClassReader,ClassVisitor,ClassWriter,FieldVisitor,Label,MethodVisitor
这些在上面的例子已经见识过了.

core api的特点是流式读取的.

比如扫描到类文件时,会回调ClassVisitorvisit()方法,扫描到类注解时,会回调ClassVisitorvisitAnnotation()方法等等.

扫描后,回调相应方法,并会返回一个对应的字节码操作对象,修改这个对象,就可以修改class文件相应结构内容,最后将这个ClassVisitor字节码内容覆盖原来.class

上一篇:Oracle-输出存储在ASM中当前数据库客户端未打开的文件列表


下一篇:Easyexcel2.2.6遇到 class net.sf.cglib.core.DebuggingClassWriter has interface org.objectweb.asm.ClassV