靜態代理

靜態代理模式其實很常見,比如買火車票這件小事:黃牛相當於是火車站的代理,我們可以通過黃牛買票,但只能去火車站進行改簽和退票。在代碼實現中相當於爲一個委託對象realSubject提供一個代理對象proxy,通過proxy可以調用realSubject的部分功能,並添加一些額外的業務處理,同時可以屏蔽realSubject中未開放的接口。

動態代理

動態代理中,代理類並不是在Java代碼中實現,而是在運行時期生成,相比靜態代理,動態代理可以很方便的對委託類的方法進行統一處理,如添加方法調用次數、添加日誌功能等等,動態代理分爲jdk動態代理和cglib動態代理,下面通過一個例子看看如何實現jdk動態代理。

jdk動態代理使用的侷限性

通過反射類Proxy和InvocationHandler回調接口實現的jdk動態代理,要求委託類必須實現一個接口,但事實上並不是所有類都有接口,對於沒有實現接口的類,便無法使用該方方式實現動態代理。

“我們相信人人都可以成爲一個IT大神,現在開始,選擇一條陽光大道,助你入門,學習的路上不再迷茫。這裏是北京尚學堂,初學者轉行到IT行業的聚集地。"

查看原文 >>
相關文章