ASM开发:编程模型和核心API
ASM开发入门:
认识ASM:是什么、有什么、能干什么
ASM开发实战:实现统计时间
ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能
ASM可以直接产生二进制class文件,也可以在类被加载入虚拟机之前动态改变类行为,ASM从类文件中读入信息后,能改变类行为,分析类信息,甚至能根据要求生成新类
目前许多框架如cglib、Hibernate、Spring都直接或间接地适用ASM操作字节码
ASM编程模型
Core API:提供了基于事件形式的编程模型。该模型不需要一次性将整个类的结构读取到内存中,因此这种方式更快、需要更少的内存,但这种编程方式难度较大
Tree API:提供了基于树形的编程模型。该模型需要一次性将一个类的完整结构全部读取到内存当中,所以这种方法需要更多的内存,这种编程方式较简单
ASM Core API中操纵字节码的功能基于ClassVisitor接口。这个接口中个每个方法对应了class文件中的每一项
ASM提供了三个基于ClassVisitor接口的类来实现class文件的生成和转换
1:ClassReader:ClassReader解析一个类的class字节码
2:ClassAdapter:ClassAdapter是ClassVisitor的实现类,实现要变化的功能
3:ClassWriter:ClassWriter也是ClassVistor的实现类,可以用来输出变化后的字节码
❤:ASM给我们提供了ASMifier工具来帮助开发,可使用ASMifier工具生成ASM结构来对比