动态代理的原理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汇编指令有必定的了解。
参考文档