上一篇说到如何用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的特点是流式读取的.
比如扫描到类文件时,会回调ClassVisitor的visit()方法,扫描到类注解时,会回调ClassVisitor的v

本文介绍了ASM库用于操作Java字节码的Core API和Tree API。Core API采用流式读取,需要了解指令和类型描述符,适合直接修改字节码。Tree API提供类节点和方法节点,方便处理复杂结构,支持数据流和控制流分析,但速度较慢。在特定场景下,如添加注解或分析流,Tree API更为适用。
订阅专栏 解锁全文
344

被折叠的 条评论
为什么被折叠?



