《三》JDK与CGLIB动态代理

一、AopProxy接口下的JdkDynamicAopProxy与CglibAopProxy区别

在这里插入图片描述
在这里插入图片描述

AopProxy接口设计就是为了获取Proxy代理对象,在AopProxy接口下分别有JdkDynamicAopProxy与CglibAopProxy两种Proxy代理对象实现, 区别在于JdkDynamicAopProxy需要指定ClassLoader而CglibAopProxy不需要指定。

二、JDK生成AopProxy代理对象

生成代理对象时,需要指明三个参数,一个类装载器,一个代理接口,一个proxy回调方法所在的对象,这个对象需要实现InvocationHandler接口

(1)从advised对象中取得代理对象接口配置,这个this.advised对象是类AdvisedSupport
在这里插入图片描述

(2)最后调用Proxy.newProxyInstance(classLoader, proxiedInterfaces, this);生成Proxy代理对象,因为JdkDynamicAopProxy本身实现了InvocationHandler接口,所以这里用this。
实现了InvocationHandler接口,会提供invoke回调入口,这样Proxy代理的接口方法被调用时,会触发invoke回调。

三、CGLIB生成AopProxy代理对象

(1)代理对象是目标对象的子类
在这里插入图片描述

(2)CGLIB方法回调的实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cglib对于aop的实现是通过DynamicAdvisedInterceptor来完成的,他是回调方法所在的对象,cglib的回调入口为DynamicAdvisedInterceptor的intercept方法,相当于jdk代理的invoke方法。而DynamicAdvisedInterceptor实现了MethodInterceptor接口,且cglib回调的实现必须实现它。

cglib与jdk对于aop实现的区别,jdk回调方法所在的对象必须实现InvocationHandler,而cglib需要实现MethodInterceptor接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章