Aop
面向切面編程 aspect oriented programing
aop關注的不再是程序代碼中的某個類,某些方法,考慮更多的是一種面到面的切入,即層與層之間的一種切入。
用處:
aop主要用於日誌記錄,性能統計,安全控制,事務處理等方面,實現公共功能性的重複使用。
好處:
1. 降低模塊與模塊之間的耦合度,提高業務代碼的聚合度。
2. 提高代碼的複用性。
3. 提高系統的擴展性。
基本概念
連接點 Joinpoint
被攔截到的每個點,spring中指被攔截到的每一個方法,spring aop 一個連接點即代表一個方法的執行。
切入點 Pointcut
對連接點進行攔截的定義。即匹配規則的定義,規定攔截哪些方法,對哪些方法進行處理。
通知 advice
攔截到每一個連接點後要做的操作。
前置通知 before:執行連接點方法前通知
返回通知 afterturn:連接點方法正常結束後返回的通知
異常通知 afterThrow:連接點方法出異常時通知
最終通知 after :連接點方法結束時通知
環繞通知 around:包圍連接點方法的通知
切面 Aspect
切面則是橫切關注點的抽象。
目標對象 Target
被代理的目標對象
織入 Weave
將切面應用到目標對象,並生成代理對象的這個過程即爲織入
引入 Introduction
在不修改原有應用程序代碼的情況下,在程序運行期爲類動態添加方法或者屬性的過程爲引入。
AOP處理日誌問題
1. 命名空間 2 配置aop代理 <aop:aspectj-autoproxy/>
代理模式實現三要素
1.接口定義 2.目標對象和代理對象實現統一的接口 3. 代理對象持有目標對象的引用,增強目標對象行爲
代理模式實現分類以及對應區別
靜態代理:手動爲目標對象製作代理對象,即在程序編譯階段完成代理對象的創建
動態代理:在程序運行期動態創建目標對象對應的代理對象
jdk動態代理:被代理目標對象必須實現摸一個或某一組接口,通過回調創建代理對象。
cglib動態代理:被代理目標可以不必實現接口,通過繼承實現。
動態代理好處:提高開發效率,可以批量化創建代理,提高代碼複用率。