Spring AOP 切入點表達式的使用

1. 切入點的標識符

Spring AOP 中目前只有執行方法這一個連接點,其支持的AspectJ切入點標識符如下:

標識符 功能
execution 匹配方法執行的連接點
within 匹配指定的類及其子類中的所有方法
this 匹配可以向上轉型爲this指定的類型的代理對象中的所有方法
target 匹配可以向上轉型爲target指定的類型的目標對象中的所有方法
args 匹配運行時傳入的參數列表的類型爲指定的參數列表類型的方法
@within 匹配持有指定註解的類的所有方法
@target 匹配持有指定註解目標對象的所有方法
@args 匹配運行時方法傳入的參數所屬的類持有指定註解的方法
@annotation 匹配持有指定註解的方法

2. 常用切入點表達式詳解

符號 含義
* 匹配任意數量字符
.. 匹配任何數量字符的重複,如在類型模式中匹配任何數量子包;而在方法參數模式中匹配任何數量參數
+ 匹配指定類型的子類型,僅能作爲後綴放在類型模式後邊

2.1 execution

execution的匹配模式是[訪問修飾符] [方法返回值] [包名.類名.方法名] (方法參數),除了返回值、方法名和參數外,另外兩項都是可選的

#匹配任意類任意返回值任意參數數量及類型的 public 方法
@Before(value = "execution(public * *(..))")

#匹配任意以To爲後綴的方法
@Before(value = "execution(* *To(..))")

#匹配Writer接口中及其實現類的方法
@Before(value = "execution(* com.aop.service.Writer+.*(..))")

#匹配 com.aop.service 包下所有類的所有方法
@Before(value = "execution(* com.aop.service.*(..))")

# 匹配所有第一個參數爲 String 類型,第二個參數爲 int 類型的 save 方法
@Before(value = "execution(* save(String,int))")

#匹配除第一個參數固定爲 String 外,後面有任意個入參且入參類型不限的 save 方法
@Before(value = "execution(* save(String,..))")

2.2 target

target表示當被代理的目標對象可以被轉換爲指定的類型時則匹配成功

#表示匹配實現了 GodService 接口的目標對象的所有方法
@Around(value = "target(aop.service.GodService)")  

2.3 @args

匹配方法傳入的參數所屬類上擁有指定的註解的情況

# 匹配方法參數類型上擁有 MyAnnotation 註解的方法調用。例如有一個方法add(MyParam param)
#接收一個MyParam類型的參數,而 MyParam 這個類是擁有註解 MyAnnotation 的,則它可以被匹配上
@Around(value = "@args(com.spring.support.MyAnnotation)")

2.4 @annotation

用於匹配方法上擁有指定註解的情況,最常使用

# 匹配所有擁有 MyAnnotation 註解的外部調用方法
@annotation(com.elim.spring.support.MyAnnotation)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章