如下引用連接中的一段話,寫的很精闢:java
咱們在寫一個功能函數時,常常須要在其中寫入與功能不是直接相關但頗有必要的代 碼,如日誌記錄,信息發送,安全和事務支持等,這些枝節性代碼雖然是必要的,但它會帶來如下麻煩:編程
枝節性代碼遊離在功能性代碼以外,它不是函數的目的,這是對OO是一種破壞segmentfault
枝節性代碼會形成功能性代碼對其它類的依賴,加深類之間的耦合,可重用性下降安全
從法理上說,枝節性代碼應該監視'着功能性代碼,而後採起行動,而不是功能性代碼 通知'枝節性代碼採起行動,這比如吟遊詩人應該是主動記錄騎士的功績而不是騎士主動要求詩人記錄本身的功績函數
在Spring的AOP編程中: 若是加入容器的目標對象有實現接口,用JDK代理 若是目標對象沒有實現接口,用Cglib代理
詳情請參見參考連接。代理