1 编写切点
@Pointcut 定义可重复使用的切点
@Pointcut("execution(public * com.xxx.mapper.*.*(..))")
public void pointCut() {
}
1.1 表示式
由下列方式来定义或者通过 &&、 ||、 !、 的方式进行组合:
1)方法
- execution:匹配方法
- within:限制匹配范围
- this:匹配 AOP 代理类的执行方法
- target:匹配目标类的执行方法
- args:将匹配方法的参数传入通知,名称必须相同
2)注解
- @within:匹配类注解
- @target:匹配类注解
- @args:匹配参数注解
- @annotation:匹配方法注解
3)bean
- bean():匹配制定 bean
1.2 格式
“?”代表可选项
execution(修饰符? 返回值 类路径? 方法名(参数)异常类型?)
- 返回值
*匹配任意 - 方法名
*匹配任意 - 参数
指定参数类型,,隔开
*任意类型
..任意个数
1.3 例子
- 任意公共方法:
execution(public * *(..)) - 任何“set”开头方法:
execution(* set*(..)) - 某类任意方法:
execution(* com.xyz.service.AccountService.*(..)) - 某包里任意方法:
execution(* com.xyz.service.*.*(..)) - 某包及子包任意方法:
execution(* com.xyz.service..*.*(..)) - 某包任意类:
within(com.test.spring.aop.pointcutexp.*) - 实现了 Intf 接口的所有类:
this(com.abc.Intf) - 带有 @xxx 注解的所有类的任意方法:
@within(org.abc.xxx)@target(org.abc.xxx))
- 带有 @xxx 注解的任意方法:
@annotation(org.abc.xxx)) - 参数带有有 @xxx 注解的方法:
@args(org.abc.xxx) - 参数类型:
args(String)