
文章插圖
代理模式的定義
代理模式(Proxy Pattern)是指為其他對象提供一種代理,以控制對這個對象的訪問 。
代理對象在客服端和目標對象之間起到中介作用 。
屬于結構型設計模式 。
生活中的代理模式
代理模式的適用場景
保護目標對象
增強目標對象
靜態(tài)代理
顯式聲明被代理對象
動態(tài)代理
動態(tài)配置和替換被代理對象
JDK動態(tài)代理的實現原理
1、拿到被代理類的引用,并且獲取它的所有的接口(反射獲?。?。
2、JDK Proxy類重新生成一個新的類,實現了被代理類所有接口的方法 。
3、動態(tài)生成Java代碼,把增強邏輯加入到新生成代碼中 。
4、編譯生成新的Java代碼的class文件 。
5、加載并重新運行新的class,得到類就是全新類 。
CGLib動態(tài)代理容易踩的坑
1、無法代理final修飾的方法
CGLib和JDK動態(tài)代理對比
1.JDK動態(tài)代理是實現了被代理對象的接口,CGLib是繼承了被代理對象 。
2.JDK和CGLib都是在運行期生成字節(jié)碼,JDK是直接寫Class字節(jié)碼,CGLib使用ASM框架寫Class字節(jié)碼,Cglib代理實現更復雜,生成代理類比JDK效率低 。
3.JDK調用代理方法,是通過反射機制調用,CGLib是通過
FastClass機制直接調用方法,CGLib執(zhí)行效率更高.
代理模式的優(yōu)點
代理模式能將代理對象與真實被調用的目標對象分離 。
一定程度上降低了系統(tǒng)的耦合程度,易于擴展 。
代理可以起到保護目標對象的作用 。
增強目標對象的職責
代理模式的缺點
代理模式會造成系統(tǒng)設計種類的數目增加
在客戶端和目標對象之間增加了一個代理對象,會造成請求處理速度變慢 。
增加了系統(tǒng)的復雜度 。
Spring中的代理選擇原則
1、當Bean有實現接口時,Spring就會用JDK的動態(tài)代理 。
2、當Bean沒有實現接口時,Spring選擇CGLib 。
3、Spring可以通過配置強制使用CGLib,只需在Spring的配置文件中加入如下代碼:
<aop:aspectj-autoproxy proxy-target-class=”true”/>
以上關于本文的內容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網」www.malaban59.cn小編還為您精選了以下內容,希望對您有所幫助:- 首頁被K一般恢復的時間 網站首頁被k怎樣才能恢復
- 北京烤鴨是從南京傳過去的嗎 北京烤鴨和南京烤鴨的區(qū)別
- 自考本科容易的專業(yè) 自考學費一般為多少
- 酷睿i3十代是什么水平 酷睿2雙核和i3哪個好
- 附專家解讀 國慶和中秋節(jié)同一天多少年一次
- 學區(qū)房一般多少錢,學區(qū)房貴還是便宜
- 春節(jié)假期全國共攬收和投遞快遞包裹7.49億件
- 玻璃鋼化糞池的費用一般是多少 玻璃鋼化糞池價格多少
- 畚箕和簸箕 讀音 簸箕的讀音
- cognac是什么酒
