前言
我先說一下,我自身學習的時候對這點知識,一直處於不太懂的狀態,每次做項目好多次都卡在這,所以我在網上查詢好多資料寫下這篇博客,希望幫助更多的人。(想要了解更多查閱網上資料)
execution(表達式)
語法:(看着語法一點一點琢磨)
execution( [修飾符] 返回值類型 包名.類名.方法名 (參數) )
參數:
-
()匹配一個無參方法
-
(
..
)參數列表可以使用..
表示有無參數均可,有參數可以是任意類型 -
(
*
)參數列表可以使用*
,表示參數可以是任意數據類型,但是必須有參數 -
(
*
,Integer
)匹配一個接受兩個參數的方法,第一個可以爲任意類型,第二個必須爲Integer。
符號作用
*
:代表一個任意類型的參數;..
:代表零個或多個任意類型的參數。
詳解
-
完全指定 一個 方法
execution(public void com.bdqn.entity.Player.updateEquip(..))
詳解:上面的語法表示匹配修飾符爲
public
返回值爲void
的updateEquip()
方法,並且在com.bdqn.entity.Player
包下 -
修飾符可以省略
execution(void com.bdqn.entity.Player.updateEquip(..))
詳解:上面的語法表示匹配 任意修飾符 返回值爲
void
的updateEquip()
方法,並且在com.bdqn.entity.Player
包下 -
返回值類型必須寫,可以用
*
代替execution(* com.bdqn.entity.Player.updateEquip(..))
詳解:上面的語法表示匹配 任意修飾符 任意返回值 爲的
updateEquip()
方法,並且在com.bdqn.entity.Player
包下 -
包名必須寫,可以用
*
代替execution(* *.*.*.Player.updateEquip(..))
-
類必須寫,可以用
*
代替execution(* com.bdqn.entity.*.updateEquip(..))
列舉常用的切入表達式
-
表示匹配任意返回值類型的
public * addNewUser(Entity.User);
-
表示匹配任意方法名
public void *(Entity.User);
-
表示匹配任意參數類型及個數的方法。
public void addNewUser(..);
-
表示匹配com.service包下所有類的所有方法。
* com.service.*.*(..);
-
表示匹配com.service包及其子包下所有的類的所有方法。
* com.service..*.(..);