《三》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接口。

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