java:代理模式帶來了什麼好處

我們先聊下什麼是代理,生活中我們經常會到超市去買東西。超市是從生產廠家拿貨放到超市進行銷售,而你不需要和生產廠家有接觸就能買到生產廠家的東西。

簡單的來說就是透過中間人去獲取某個東西、或者做某件事

。我們管這種思想叫做代理,英文proxy。

java:代理模式帶來了什麼好處

這種思想是面向物件程式設計中比較常見的思想,在java中我們管這種思想叫做

代理模式

java:代理模式帶來了什麼好處

代理可以分為兩種,一種是

靜態代理

:只能靜態地代理某些類或者某些方法,比如代理建立物件的方式做代理,一

般不推薦

使用這種代理功能性比較弱。第二種是

動態代理

:動態代理又可以分成

jdk動態代理

CGLIB動態代理

cglib動態代理

,可以理解為為我們的目標物件,生成。class位元組碼。cglib代理的實現方式有asm和

Javassist,雖然cglib動態代理簡化了開發,但是做得並不夠極致。所以有了jdk的動態代理。

jdk動態代理

,jdk的動態代理是透過反射進行實現的,透過

newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)進行物件的代理,直接代理在記憶體當中,我們透過觀察可以看到反射的第二個引數是介面,也就是說jdk代理只能代理到接口裡的方法,對於類自己的實現表示無能為力。而cglib卻可以解決這個問題。

所以兩種動態代理的方式,各有優缺點。這個也是springAOP中為什麼會用到兩種動態代理,因為單個的代理有侷限性。