代理模式
代理(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)相同的接口或者是繼承相同父類.



靜態(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代理