1 切入點表達式
1.1 作用
通過表達式的方式定位一個或多個具體的連接點。
1.2 語法細節
①切入點表達式的語法格式
execution([權限修飾符] [返回值類型] [簡單類名/全類名] [方法名]([參數列表])) |
②舉例說明
表達式 |
execution(* com.atguigu.spring.ArithmeticCalculator.*(..)) |
含義 |
ArithmeticCalculator接口中聲明的所有方法。 com.atguigu.spring.ArithmeticCalculator.*(..)表示目標方法的簽名。 第一個“*”代表任意修飾符及任意返回值。 第二個“*”代表任意方法。 “..”匹配任意數量、任意類型的參數。 若目標類、接口與該切面類在同一個包中可以省略包名。 |
表達式 |
execution(public * ArithmeticCalculator.*(..)) |
含義 |
ArithmeticCalculator接口的所有公有方法 |
表達式 |
execution(public double ArithmeticCalculator.*(..)) |
含義 |
ArithmeticCalculator接口中返回double類型數值的方法 |
表達式 |
execution(public double ArithmeticCalculator.*(double, ..)) |
含義 |
第一個參數為double類型的方法。 “..” 匹配任意數量、任意類型的參數。 |
表達式 |
execution(public double ArithmeticCalculator.*(double, double)) |
含義 |
參數類型為double,double類型的方法 |
③在AspectJ中,切入點表達式可以通過 “&&”、“||”、“!”等操作符結合起來。
表達式 |
execution (* *.add(int,..)) || execution(* *.sub(int,..)) |
含義 |
任意類中第一個參數為int類型的add方法或sub方法 |
1.3 切入點表達式應用到實際的切面類中
2 當前連接點細節
2.1 概述
切入點表達式通常都會是從宏觀上定位一組方法,和具體某個通知的注解結合起來就能夠確定對應的連接點。那么就一個具體的連接點而言,我們可能會關心這個連接點的一些具體信息,例如:當前連接點所在方法的方法名、當前傳入的參數值等等。這些信息都封裝在JoinPoint接口的實例對象中。
2.2 JoinPoint
3 重用切入點定義
[1] 在編寫AspectJ切面時,可以直接在通知注解中書寫切入點表達式。但同一個切點表達式可能會在多個通知中重復出現。
[2] 在AspectJ切面中,可以通過@Pointcut注解將一個切入點聲明成簡單的方法。切入點的方法體通常是空的,因為將切入點定義與應用程序邏輯混在一起是不合理的。
[3] 切入點方法的訪問控制符同時也控制着這個切入點的可見性。如果切入點要在多個切面中共用,最好將它們集中在一個公共的類中。在這種情況下,它們必須被聲明為public。在引入這個切入點時,必須將類名也包括在內。如果類沒有與這個切面放在同一個包中,還必須包含包名。
[4]其他通知可以通過方法名稱引入該切入點
https://www.cnblogs.com/kangxingyue-210/p/7449924.html