文章目录
切入点表达式的细节
标准写法
execution(访问修饰符 返回值类型 全限定类名.方法名(参数列表))
例:
execution(public com.test.service.UserServiceImpl.addUser(com.test.entity.User))
访问修饰符可以省略
execution(public void com.test.service.UserServiceImpl.addUser(com.test.entity.User))
等价于
execution(void com.test.service.UserServiceImpl.addUser(com.test.entity.User))
使用通配符表示任意的返回值
execution(* com.test.service.UserServiceImpl.addUser(com.test.entity.User))
包名可以使用通配符
包名使用通配符表示,可以用来表示任意包,但是有几级包名,写几个*.
execution(* *.*.*.UserServiceImpl.addUser(com.test.entity.User))
这个例子表示,任意三级包名下的UserServiceImpl类中,返回任意类型的,参数为User类型的addUser方法。
表示任意包及其子包的通配符
使用*..
表示任意包及其子包。
execution(* *..UserServiceImpl.addUser(com.test.entity.User))
这个例子表示,任意包下的UserServiceImpl类中,返回任意类型的,参数为User类型的addUser方法。
之前的例子限定了包的级数,这里的*..
表示任意的包及其子包
类名使用通配符
execution(* *..*.addUser(com.test.entity.User))
这个例子表示任意包下的,任意类中参数为User的addUser方法。
方法名可以使用通配符
execution(* *..*.*(com.test.entity.User))
这个例子表示任意包下的,任意类中的参数为User的任意方法。
参数列表
普通类型:直接写类型
execution(* *..*.*(boolean))
引用类型:全限定类名
execution(* *..*.*(com.test.entity.User))
使用通配符表示
execution(* *..*.*(*,*))
表示必须有任意类型的两个参数的方法。
表示任意参数列表
execution(* *..*.*(..))
使用..
表示任意的参数列表,可以没有参数,也可以有任意多个参数。
全通配写法:所有的方法都是切入点
execution(* *..*.*(..))
全通配写法很少使用。