前言
我先说一下,我自身学习的时候对这点知识,一直处于不太懂的状态,每次做项目好多次都卡在这,所以我在网上查询好多资料写下这篇博客,希望帮助更多的人。(想要了解更多查阅网上资料)
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..*.(..);