一、字节码操控的基础
1、java动态性的两种常见实现方式
1)字节码操作
2)反射
2、运行时操作字节码可以实现:
1)动态生成新的类
2)动态改变某个类的结构(添加删除修改 新的属性和方法)
字节码操作比反射开销小,性能高
3、常见的操作字节码的技术
1)BCEL:Byte code engineering library ,在实际的JVM指令层次上进行操作,拥有丰富的JVM指令级支持。
2)ASM:轻量级的java字节码操控框架,直接涉及到JVM底层的指令和操作。可以在类被加载到虚拟机前动态改变类的行为,Java class 被存储在 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
3)CGLIB:code generate library,高性能code生成类库,基于ASM
4)javassist:分析、编辑创建字节码的类库,比ASM性能差,与CGLIB差不多,使用简单。