Spring AOP底层实现
来源:互联网 发布:淘宝怎么看几颗心 编辑:程序博客网 时间:2024/06/05 04:50
Spring AOP 代理实现有两种: JDK动态代理 和 Cglib框架动态代理
JDK动态代理 简单介绍http://blog.csdn.net/qq_34446485/article/details/77460855
JDK API 内置 ---- 通过 Proxy类,为目标对象创建代理 (必须面向接口代理 )
public class JdkProxyFactory implements InvocationHandler {// 被代理对象private Object target;// 在构造方法对象时,传入被代理对象public JdkProxyFactory(Object target) {this.target = target;}// 创建代理public Object createProxy() {// 三个参数: 类加载器、 实现接口、 invocationhandlerreturn Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("记录日志!!!!!!");// 调用目标真实方法// target 被代理对象, args 方法参数 , method 被调用的方法return method.invoke(target, args);}}
缺点: 使用Jdk动态代理,必须要求target目标对象,实现接口 ,如果没有接口,不能使用Jdk动态代理
Cglib 动态代理
CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。
Cglib 不但可以对接口进行代理,也可以对目标类对象,实现代理 (解决了 Jdk 只能对接口代理问题 )在spring3.2版本 core包中内置cglib 类
public class CglibProxyFactory implements MethodInterceptor {// 被代理目标对象private Object target;// 在构造工厂时传入被代理对象public CglibProxyFactory(Object target) {this.target = target;}// 创建代理对象方法public Object createProxy() {// 1、 创建Enhancer对象Enhancer enhancer = new Enhancer();// 2、 cglib创建代理,对目标对象,创建子类对象enhancer.setSuperclass(target.getClass());// 3、传入 callback对象,对目标增强enhancer.setCallback(this);return enhancer.create();}@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {System.out.println("记录日志......");// 按照JDK编程return method.invoke(target, args);}}
Cglib 创建代理思想: 对目标类创建子类对象
设置 superClass 对哪个类创建子类 (类似 JDK代理 接口)
设置 callback 实现增强代码 (类似 JDK代理 InvocationHandler )
在cglib的callback函数中,要执行被代理对象的方法
method.invoke(target, args); 等价于 methodProxy.invokeSuper(proxy, args);
优先对接口代理 (使用JDK代理),如果目标没有接口,才会使用cglib代理 !
阅读全文
0 0
- Spring AOP底层实现
- Spring AOP底层实现原理
- [转贴] Spring AOP的底层实现技术
- Spring AOP的底层实现技术
- Spring AOP的底层实现技术
- Spring AOP的底层实现技术
- Spring AOP的底层实现技术
- Spring AOP的底层实现技术
- Spring AOP的底层实现技术
- Spring AOP的底层实现技术
- Spring AOP的底层实现技术
- Spring中的AOP底层实现原理
- spring(三)---aop底层实现原理
- Spring AOP的底层实现原理
- Spring中的AOP底层实现原理
- Spring AOP的底层实现技术
- Spring AOP底层原理
- AOP的底层实现
- HTML知识点
- List的toArray方法的使用方法以及强制转换时的报错问题
- mysql全量和增量备份脚本
- java反射机制
- 比特币扩容与分叉
- Spring AOP底层实现
- fio数据生成曲线图
- synchronized与static synchronized 的区别
- [编程题] 小易记单词
- TensorFlow练习(二)——搭建神经网络结构
- http虚拟主机配置——基于端口
- 错误:声明指定了两个以上的数据类型
- javascript中的函数,闭包简单介绍
- 设计模式-生产者消费者模式