框架简介
2025年09月21日
框架简介
相信读者们读完第三章之后对字节码指令都很熟悉了。比如调用方法的四条常用字节码指令都需要一个操作数,而操作数的值是常量池中表示某个方法符号引用的常量在常量池中的索引,因此,在写字节码指令时,我们需要知道要调用的方法的描述符是否存在常量池中,如果不存在,我们需要往常量池添加常量,这些都是重复且繁琐的工作。因此,我们需要一件趁手的兵器来帮我们完成这些工作。
ASM是一个非常小且快速的java字节码操作框架。除ASM外,javassist也是一个非常热门的字节码操作框架,很多人也喜欢拿这两个框架进行比较。javassist的主要优点是简单,使用javassist不需要了解class文件结构,也不需要了解字节码指令,就能动态改变类的结构或生成类,但这同时也是缺点,这种简单带来了局限性,也导致性能降低。而ASM恰好与之相反,使用ASM需要了解底层,对使用者有一定的门槛,但ASM没有局限,我们完全可以使用ASM编写任意一个能用Java代码编写的类。
由于类只动态生成或改写一次,因此性能可能并不是我们考虑的最大因素,但ASM能实现的功能更多,可玩性更强,ASM使用访问者模式并提供非常丰富的API简化我们的开发。