代理模式
創(chuàng)新互聯(lián)建站專注于融水企業(yè)網(wǎng)站建設,響應式網(wǎng)站,成都商城網(wǎng)站開發(fā)。融水網(wǎng)站建設公司,為融水等地區(qū)提供建站服務。全流程按需搭建網(wǎng)站,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務
代理模式的英文叫做Proxy或Surrogate,中文都可譯為”代理“,所謂代理,就是一個人或者一個機構代表另一個人或者另一個機構采取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用
A. 抽象主題角色
聲明了真實主題和代理主題的共同接口,這樣一來在任何可以使用真實主題的地方都可以是使用代理主題
B. 代理主題(Proxy)角色:
代理主題角色內部含有對真實主題的引用,從而可以在任何時候操作真實主題對象;代理主題角色提供一個與真實主題角色相同的接口,以便可以在任何時候都可以替代真實主題控制對真實主題的引用,負責在需要的時候創(chuàng)建真實主題對象(和刪除真實主題對象);代理角色通常在將客戶端調用傳遞給真實的主題之前或之后,都要執(zhí)行某個操作,而不是單純地將調用傳遞給真實主題對象。
C. 真實主題角色
定義了代理角色所代表地真實對象
例如:
用動態(tài)代理模式重構
JDK動態(tài)代理
目標類
攔截器
代理類
總結:1、因為利用JDKProxy生成的代理類實現(xiàn)了接口,所以目標類中所有的方法在代理類中都有。
2、生成的代理類的所有的方法都攔截了目標類的所有的方法。而攔截器中invoke方法的內容正好就是代理類的各個方法的組成體。
3、利用JDKProxy方式必須有接口的存在。
4、invoke方法中的三個參數(shù)可以訪問目標類的被調用方法的API、被調用方法的參數(shù)、被調用方法的返回類型。
用JDK動態(tài)代理模式重構
用JDK動態(tài)代理模式重構hibernate事務
cglib動態(tài)代理
1、 CGlib是一個強大的,高性能,高質量的Code生成類庫。它可以在運行期擴展Java類與實現(xiàn)Java接口。
2、 用CGlib生成代理類是目標類的子類。
3、 用CGlib生成 代理類不需要接口
4、 用CGLib生成的代理類重寫了父類的各個方法。
5、 攔截器中的intercept方法內容正好就是代理類中的方法體
用cglib動態(tài)代理模式重構hibernate事務
spring兩種代理方式
1、若目標對象實現(xiàn)了若干接口,spring使用JDK的java.lang.reflect.Proxy類代理。
優(yōu)點:因為有接口,所以使系統(tǒng)更加松耦合
缺點:為每一個目標類創(chuàng)建接口
2、若目標對象沒有實現(xiàn)任何接口,spring使用CGLIB庫生成目標對象的子類。
優(yōu)點:因為代理類與目標類是繼承關系,所以不需要有接口的存在。
缺點:因為沒有使用接口,所以系統(tǒng)的耦合性沒有使用JDK的動態(tài)代理好。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
分享題目:詳解Spring的兩種代理方式:JDK動態(tài)代理和CGLIB動態(tài)代理
URL分享:http://redsoil1982.com.cn/article8/gjpgop.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿網(wǎng)站建設、網(wǎng)站營銷、網(wǎng)站維護、Google、App開發(fā)、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)