java三種代理模式

代理模式

代理(Proxy)是一種設(shè)計(jì)模式,提供了對目標(biāo)對象另外的訪問方式;即通過代理對象訪問目標(biāo)對象.這樣做的好處是:可以在目標(biāo)對象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作,即擴(kuò)展目標(biāo)對象的功能.

這里使用到編程中的一個(gè)思想:不要隨意去修改別人已經(jīng)寫好的代碼或者方法,如果需改修改,可以通過代理的方式來擴(kuò)展該方法.

靜態(tài)代理

靜態(tài)代理在使用時(shí),需要定義接口或者父類,被代理對象與代理對象一起實(shí)現(xiàn)相同的接口或者是繼承相同父類.

兩個(gè)類同時(shí)繼承payment接口 實(shí)現(xiàn)pay()方法
兩個(gè)類同時(shí)繼承payment接口 實(shí)現(xiàn)pay()方法
demo

靜態(tài)代理總結(jié):

1.可以做到在不修改目標(biāo)對象的功能前提下,對目標(biāo)功能擴(kuò)展.

2.缺點(diǎn):

因?yàn)榇韺ο笮枰c目標(biāo)對象實(shí)現(xiàn)一樣的接口,所以會(huì)有很多代理類,類太多.同時(shí),一旦接口增加方法,目標(biāo)對象與代理對象都要維護(hù).

如何解決靜態(tài)代理中的缺點(diǎn)呢?答案是可以使用動(dòng)態(tài)代理方式

動(dòng)態(tài)代理

動(dòng)態(tài)代理有以下特點(diǎn):

1.代理對象,不需要實(shí)現(xiàn)接口

2.代理對象的生成,是利用JDK的API,動(dòng)態(tài)的在內(nèi)存中構(gòu)建代理對象(需要我們指定創(chuàng)建代理對象/目標(biāo)對象實(shí)現(xiàn)的接口的類型)

3.動(dòng)態(tài)代理也叫做:JDK代理,接口代理

總結(jié):

代理對象不需要實(shí)現(xiàn)接口,但是目標(biāo)對象一定要實(shí)現(xiàn)接口,否則不能用動(dòng)態(tài)代理

cglib動(dòng)態(tài)代理


在Spring的AOP編程中:

如果加入容器的目標(biāo)對象有實(shí)現(xiàn)接口,用JDK代理.

如果目標(biāo)對象沒有實(shí)現(xiàn)接口,用Cglib代理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概述 ??代理模式我們接觸的就比較多了,所謂的代理模式就是,給某一個(gè)對象提供一個(gè)代理對象,并由代理對象控制對原...
    騎著烏龜去看海閱讀 1,011評論 0 9
  • 代理可以分為靜態(tài)代理、動(dòng)態(tài)代理,動(dòng)態(tài)代理又可以分為 jvm的動(dòng)態(tài)代理 和 cglib的動(dòng)態(tài)代理。像spring框架...
    路遠(yuǎn)處幽閱讀 386評論 0 1
  • 高艷峰 信陽 網(wǎng)絡(luò)中級九期 堅(jiān)持分享第259天 2018-12-14 為參加市里組織的工間操比賽,單位組織...
    gyf16閱讀 152評論 0 0
  • 被記住的,永遠(yuǎn)是第一名。 試想一下,回答問題的時(shí)候,第一個(gè)舉手的人,往往受到大家的關(guān)注,也會(huì)得到發(fā)言的機(jī)會(huì)。后面舉...
    可伊伊閱讀 293評論 0 0
  • 這幾天因?yàn)樘鞖夥闯?,舊病復(fù)發(fā),整天昏昏沉沉,恨不得一天都用來睡覺。 下班,三個(gè)同事一起回家,車上,前面的同事電話不...
    小魚游游跳龍門閱讀 495評論 6 23

友情鏈接更多精彩內(nèi)容