Java字节码库允许我们通过字节码库的API动态创建或修改Java类、方法、变量等操作而被广泛使用,本节将讲解ASM库的使用。
ASM是一种通用Java字节码操作和分析框架,它可以直接以二进制形式修改一个现有的类或动态生成类文件。ASM的版本更新快(ASM 9.0
已经支持JDK 16
)、性能高、功能全,学习成本也相对较高,ASM官方用户手册:ASM 4.0 A Java bytecode engineering library。
ASM提供了三个基于ClassVisitor API
的核心API,用于生成和转换类:
ClassReader
类用于解析class文件或二进制流;ClassWriter
类是ClassVisitor
的子类,用于生成类二进制;ClassVisitor
是一个抽象类,自定义ClassVisitor
重写visitXXX
方法,可获取捕获ASM类结构访问的所有事件;