代理模式學習

1. 參考連接

  1. Java的三種代理模式

2. 知識點理解

1. 爲什麼使用代理模式

如下引用連接中的一段話,寫的很精闢:java

咱們在寫一個功能函數時,常常須要在其中寫入與功能不是直接相關但頗有必要的代 碼,如日誌記錄,信息發送,安全和事務支持等,這些枝節性代碼雖然是必要的,但它會帶來如下麻煩:編程

  1. 枝節性代碼遊離在功能性代碼以外,它不是函數的目的,這是對OO是一種破壞segmentfault

  2. 枝節性代碼會形成功能性代碼對其它類的依賴,加深類之間的耦合,可重用性下降安全

  3. 從法理上說,枝節性代碼應該監視'着功能性代碼,而後採起行動,而不是功能性代碼 通知'枝節性代碼採起行動,這比如吟遊詩人應該是主動記錄騎士的功績而不是騎士主動要求詩人記錄本身的功績函數


2. 代理的做用或實現的目的

  1. 爲其餘對象提供一個代理以控制對某個對象的訪問,即經過代理對象訪問目標對象.
  2. 好處是:能夠在目標對象實現的基礎上,加強額外的功能操做,即擴展目標對象的功能.
  3. 編程思想:不要隨意去修改別人已經寫好的代碼或者方法,若是需改修改,能夠經過代理的方式來擴展該方法

3. java的三種代理

  1. 靜態代理:源碼中在代理類的構造方法中生成真實類對象
  2. 動態代理:JDK中經過反射機制
  3. Cglib代理:底層爲ASM,子類代理,上述兩種是接口代理
在Spring的AOP編程中:
若是加入容器的目標對象有實現接口,用JDK代理
若是目標對象沒有實現接口,用Cglib代理

詳情請參見參考連接。代理

相關文章
相關標籤/搜索