先小結一下:
args()是用來匹配並且接收目標方法的參數的.
argNames(用在注解中)與arg-names(用在XML中),他們是同一個東西.
argNames用來接收AspectJ表達式中的參數(其中也包含args).
可以通過調整argNames參數名的順序,來調整參數傳值的順序.
==========================schema===========================
==========================aspectJ===========================
注解配置時
// 如果在@Pointcut中定義了args,那么也要定義argNames,並且兩者的參數名稱必須一樣,順序可以不一樣,(有其他作用) // 注意是使用&&鏈接 @Pointcut(value="execution(* *.*(..)) && args(paramName)", argNames="paramName")
5.arg-names說明:
XML配置時
<aop:(before|after|..) ... arg-names="paramName"/> // 通知方法的定義中
注解配置時
@Pointcut(...,argNames="paramName") // 切入點的定義中 @Before(..., argNames="paramName") // 通知方法的定義中
6.args可以用來定義目標方法必須要具備的參數個數,而且執行通知的方法也必須帶相同個數參數|或者不帶參數. 提示:通知方法中的參數類型可以是目標參數的類型或者目標參數的父類型.(推理一下如果通知方法與目標方法類型不一致會直接導致ClassCastException異常)
7.args與args-names是引用的關系,並且是根據參數名稱來傳遞值(不是順序),所以參數名字必須一致
-- 我猜是args的參數值傳遞給argNames,
8.基於注解配置時更特殊,除上面兩種約束之外
在@pointcut中args與args-names必須成對出現
9.AspectJ語法(參考地址)