字节码操作
Java动态性的两种常见实现方式
字节码操作
反射
运行时操作字节码可以让我们实现如下功能
- 动态生成新的类
- 动态改变某个类的结构(添加/删除/修改 新的属性/方法)
优势
- 比反射开销小,性能高
- Javaasist性能高于反射,低于ASM
常见的字节码操作类库
BCEL
Byte Code Engineering Library,这是Apache software Foundation的Jakarta项目的一部分,BCEL是Java classworking广泛使用的一种框架,它可以让你深入JVM汇编语言进行类操作的细节。BCEL与Javassist有不同的处理字节码的方法BCEL在实际的JVM指令层次上进行操作(BCEL拥有丰富的JVM指令级支持)而Javassist所强调的是源代码级别的工作。
ASM
是一个轻量级java字节码操作框架,直接涉及到JVM底层的操作和指令
CGLIB(Code Generation Library)
是一个强大的,高性能,高质量的Code生成类库,基于ASM实现。
Javassit
是一个开源的分析、编辑和创建Java字节码的类库。性能较ASM差,和cglib差不多,但使用简单。很多开源框架都在使用它。
未完