美文网首页
Java动态代理机制详解(JDK 和CGLIB,Javassis

Java动态代理机制详解(JDK 和CGLIB,Javassis

作者: 游侠_6fb7 | 来源:发表于2020-04-14 10:28 被阅读0次

    动态代理的原理

    javasist——>方式

    1.   获取 RealSubject上的所有接口列表;
    2.   确定要生成的代理类的类名,默认为:com.sun.proxy.$ProxyXXXX ;
    
    3.   根据需要实现的接口信息,在代码中动态创建 该Proxy类的字节码;
    
    4 .  将对应的字节码转换为对应的class 对象;
    
    5.   创建InvocationHandler 实例handler,用来处理Proxy所有方法调用;
    
    6.   Proxy 的class对象 以创建的handler对象为参数,实例化一个proxy对象
    

    cglib 创建某个类A的动态代理类的模式是:

    1. 查找A上的所有非final 的public类型的方法定义;

    2. 将这些方法的定义转换成字节码;

    3. 将组成的字节码转换成相应的代理的class对象;

    4. 实现 MethodInterceptor接口,用来处理 对代理类上所有方法的请求(这个接口和JDK动态代理InvocationHandler的功能和角色是一样的)

    Java字节码生成开源框架介绍--ASM:

    ASM 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。

    不过ASM在创建class字节码的过程中,操纵的级别是底层JVM的汇编指令级别,这要求ASM使用者要对class组织结构和JVM汇编指令有一定的了解。

    相关文章

      网友评论

          本文标题:Java动态代理机制详解(JDK 和CGLIB,Javassis

          本文链接:https://www.haomeiwen.com/subject/ulhzmhtx.html