Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

动态代理的原理java

javasist——>方式 框架

    1.   获取 RealSubject上的全部接口列表;
    2.   肯定要生成的代理类的类名,默认为:com.sun.proxy.$ProxyXXXX ;ui

    3.   根据须要实现的接口信息,在代码中动态建立 该Proxy类的字节码;lua

    4 .  将对应的字节码转换为对应的class 对象;.net

    5.   建立InvocationHandler 实例handler,用来处理Proxy全部方法调用;代理

    6.   Proxy 的class对象 以建立的handler对象为参数,实例化一个proxy对象对象

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

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汇编指令有必定的了解。

 

参考文档 

https://blog.csdn.net/luanlouis/article/details/24589193

相关文章
相关标签/搜索