@PointCut切入点表达式语法格式是:execution(访问权限 返回值类型 方法全限定名(参数类型列表))
限定符:
*:
1)匹配某全类名下,任意或多个方法:
表示匹配com.zdc.aop.Calculator下以a打头的任意方法。并且返回值和两个参数都是int类型。
execution(public int com.zdc.aop.Calculator.a*(int, int))
表示匹配com.zdc.aop.Calculator下的任意方法。并且返回值和两个参数都是int类型。
execution(public int com.zdc.aop.Calculator.*(int, int))
2)在Spring中只有public权限能拦截到,访问权限可以省略(访问权限不能写*):
// 权限省略,表示任意类型的访问权限 ,但Spring现在只支持public权限
execution(int com.zdc.aop.Calculator.*(int, int))
3)匹配任意类型的返回值,可以使用 * 表示:
execution(* com.zdc.aop.Calculator.*(int, int))
4) 任意类型参数:
// 表示第二个参数是任意类型
execution(* com.zdc.aop.Calculator.*(int,*))
..:可以匹配多层路径,或任意多个任意类型参数:
// 表示com和aop之间可以有任意层级的包
execution(* com..aop.Calculator.*(int,int))
// 表示第一个参数是int。之后可以有任意个任意类型的参数
execution(* com.zdc.aop.Calculator.*(int,..))
切入点表达式连接:&& 、||:
// 表示需要同时满足两个表达式
@Before("execution(public int com.zdc.aop.Calculator.add(int, int))"
+ " && "
+ "execution(public * com.zdc.aop.Calculator.add(..))")
// 表示两个条件只需要满足一个,就会被匹配到
@Before("execution(public int com.zdc.aop.Calculator.add(int, int))"
+ " || "
+ "execution(public * com.zdc.aop.Calculator.a*(int))")