Several Proxy Types in Java
2021-06-15 22:53:49
Java
212
  • JDK静态代理:直接采用代理模式
  • JDK的动态代理:针对接口的,无法代理类,在运行期生成代理类
  • CGLib动态代理:可以针对接口与普通类(继承方式),底层使用ASM框架生成字节码完成代理功能
  • AspectJ静态代理:在编译期间就生成了class文件完成了代理
  • Javassist是一个开源的分析、编辑和创建Java字节码的类库。Javassist是一个开源的分析、编辑和创建Java字节码的类库,在性能上Javassist高于反射,但低于ASM,因为Javassist增加了一层抽象。在实现成本上Javassist和反射都很低,而ASM由于直接操作字节码,相比Javassist源码级别的api实现成本高很多。
  • BCEL: Apache Byte Code Engineering Library ,可以深入 Java 类的字节码。可以用它转换现有的类表示或者构建新的类,因为 BCEL 在单独的 JVM 指令级别上进行操作,所以可以让您对代码有最强大的控制。不过,这种能力的代价是复杂性。