1.什么是ASM在上节我们知道,通过javac编译生成之后生成的是字节码,但是我们可能会有一些需求,比如需要AOP切面,事务的统一管理,有些重复的代码需要我们来回的敲,又或者我们需要生成自己的字节码来使用(fastjson就是这么做的)。但是字节码如果我们直接操作,成本太大,并且效率也不高。这个时候你就需要一款利器,将字节码转换成java语言,从而你就可以随心所欲的操纵字节码。这些工具如ASM,例如Javaassit,BCEL等等,都可以用来操作字节码。而这里我要介绍的就是操作字节码的一把利器-ASM,ASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。ASM的优点如下:
- 有一个简单的模块API,设计完善,使用方便。
- 更新速度快,支持最新的Java版本
- 小而快,非常可靠
- 已经有很多著名的开源框架都在使用,例如cglib,spring,fastjson等等。
- 源许可开放,几乎允许任意使用。asm的具体流程如下所示:
![]()
2.ASM的简单入门在这个小标题我会简单的介绍,如何去使用ASM。在这里之前我希望你有idea编译器,如果你有的话,可以去插件库里面下载一个ASM Bytecode Outline。有了这个我们后面开发ASM将会感受到美滋滋,如鱼得水。
ASM 库 |
|