IIWAB java动态代理技术 - IIWAB

java动态代理技术

IIWAB 8月前 ⋅ 265 阅读

Java中常见的动态代理有:JDK动态代理、cglib、如Javaassist、Byte Buddy、ASM等,它们都可以用来实现动态代理或者字节码操作。如下所示:

JDK动态代理:运行期动态的创建代理类,只支持接口;它是通过java.lang.reflect.Proxy类和InvocationHandler接口来实现的。

Cglib动态代理则是通过继承被代理的类来实现的,它不要求被代理的类必须实现接口。Cglib是一个强大的高性能的代码生成包,它可以在运行期动态生成一个被代理类的子类,并覆盖其中特定的方法。

ASM:一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。不过ASM在创建class字节码的过程中,操纵的级别是底层JVM的汇编指令级别,这要求ASM使用者要对class组织结构和JVM汇编指令有一定的了解;

javassist:一个开源的分析、编辑和创建Java字节码的类库(源码级别的类库)。javassist是jboss的一个子项目,其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类;

bytebuddy:一个更高层次操作字节码的工具包。ByteBuddy在性能上具有优势,且无需理解字节码格式。使用方式简单,仅需引入Maven依赖。可以通过ByteBuddy创建代理类和代理方法,使用灵活。


全部评论: 0

    我有话说: