代理模式的定義
代理模式(Proxy Pattern)是指為其他對象提供一種代理,以控制對這個對象的訪問。
代理對象在客服端和目標對象之間起到中介作用。
屬於結構型設計模式。
生活中的代理模式

代理模式的適用場景
保護目標對象
增強目標對象
靜態代理
顯式聲明被代理對象
動態代理
動態配置和替換被代理對象
JDK動態代理的實現原理
1、拿到被代理類的引用,並且獲取它的所有的介面(反射獲取)。
2、JDK Proxy類重新生成一個新的類,實現了被代理類所有介面的方法。
3、動態生成Java代碼,把增強邏輯加入到新生成代碼中。
4、編譯生成新的Java代碼的class文件。
5、載入並重新運行新的class,得到類就是全新類。
CGLib動態代理容易踩的坑
1、無法代理final修飾的方法
CGLib和JDK動態代理對比
1.JDK動態代理是實現了被代理對象的介面,CGLib是繼承了被代理對象。
2.JDK和CGLib都是在運行期生成位元組碼,JDK是直接寫Class位元組碼,CGLib使用ASM框架寫Class位元組碼,Cglib代理實現更複雜,生成代理類比JDK效率低。
3.JDK調用代理方法,是通過反射機制調用,CGLib是通過
FastClass機制直接調用方法,CGLib執行效率更高.
代理模式的優點
代理模式能將代理對象與真實被調用的目標對象分離。
一定程度上降低了系統的耦合程度,易於擴展。
代理可以起到保護目標對象的作用。
增強目標對象的職責
代理模式的缺點
代理模式會造成系統設計種類的數目增加
在客戶端和目標對象之間增加了一個代理對象,會造成請求處理速度變慢。
增加了系統的複雜度。
Spring中的代理選擇原則
1、當Bean有實現介面時,Spring就會用JDK的動態代理。
2、當Bean沒有實現介面時,Spring選擇CGLib。
3、Spring可以通過配置強制使用CGLib,只需在Spring的配置文件中加入如下代碼:
<aop:aspectj-autoproxy proxy-target-class=”true”/>
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/268620.html
微信掃一掃
支付寶掃一掃