AOP 相關術語
Joinpoint( 連接點):
所謂連接點是指那些被攔截到的點。在 spring 中,這些點指的是方法,
因爲 spring 只支持方法類型的 連接點。
Pointcut( 切入點):
所謂切入點是指我們要對哪些 Joinpoint 進行攔截的定義。
Advice( 通知/ 增強):
所謂通知是指攔截到 Joinpoint 之後所要做的事情就是通知。
通知的類型:前置通知,後置通知,異常通知,最終通知,環繞通知。
Introduction( 引介):
引介是一種特殊的通知在不修改類代碼的前提下, Introduction 可以在運行期爲類動態地添加一些方
法或 Field。
Target( 目標對象):
代理的目標對象。
Weaving( 織入):
是指把增強應用到目標對象來創建新的代理對象的過程。
spring 採用動態代理織入,而 AspectJ 採用編譯期織入和類裝載期織入。
Proxy (代理):
一個類被 AOP 織入增強後,就產生一個結果代理類。
Aspect( 切面):
是切入點和通知(引介)的結合。
切入點表達式(execution):匹配方法的執行(常用)
表達式語法:execution([修飾符] 返回值類型 包名.類名.方法名(參數))
寫法說明:
全匹配方式:
public void com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)
訪問修飾符可以省略
void com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)
返回值可以使用*號,表示任意返回值
* com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)
包名可以使用*號,表示任意包,但是有幾級包,需要寫幾個*
* *.*.*.*.AccountServiceImpl.saveAccount(com.itheima.domain.Account)
使用..來表示當前包,及其子包
* com..AccountServiceImpl.saveAccount(com.itheima.domain.Account)
類名可以使用*號,表示任意類
* com..*.saveAccount(com.itheima.domain.Account)
方法名可以使用*號,表示任意方法
* com..*.*( com.itheima.domain.Account)
參數列表可以使用*,表示參數可以是任意數據類型,但是必須有參數
* com..*.*(*)
參數列表可以使用..表示有無參數均可,有參數可以是任意類型
* com..*.*(..)
全通配方式:
* *..*.*(..)
注:
通常情況下,我們都是對業務層的方法進行增強,所以切入點表達式都是切到業務層實現類。
execution(* com.itheima.service.impl.*.*(..))
配置Spring中的IOC
- (前置通知,後置通知,異常通知,最終通知) 與 環繞通知 只能使用一個
1、使用前置通知,後置通知,異常通知,最終通知
2、使用環繞通知
1、配置XML
2、aroundPringLog