Pointcut expression【切面表达式】
expression
- designators
- execution(),...
- wildcards
- *,..,+
- operators
- &&,||,!
注释:
wildcards
- *:匹配任意数量的字符
- +:匹配指定类及其子类
- ..:匹配任意数的子包或者参数
匹配包、类(within())
// 匹配ProductService类里面的所有方法
@Pointcut("within(com.esurer.service.ProductService)")
public void matchType(){}
//匹配com.esurer包及其子包下的所有累的方法
@Pointcut("within(com.esurer..*)")
public void matchPackage(){}
匹配对象
/**
* public class DemoDao implementsIDao{}
**/
//匹配AOP对象的目标对象为指定类型的方法,即匹配实现DemoDao接口的对象的方法
@Pointcut("this(com.esurer.DemoDao)")
public void thisDemo(){}
//匹配实现IDao接口的目标对象(而不是aop代理后的对象)的方法,这里即DemoDao的方法
@Pointcut("target(com.esurer.IDao)")
public void targetDemo(){}
//匹配所有以Service结尾的bean里的方法
@Pointcut("bean(*Service)")
public void beanDemo
参数匹配
//匹配任何以find开头而且只有一个Long参数的方法
@Pointcut("execution(* *.find*(Long))")
public void argsDemo1(){}
//匹配任何一个只有Long类型参数的方法
@Pointcut("args(Long)")
public void argsDemo2(){}
//匹配任何以find开头的而且第一个参数类型为Long的方法
@Pointcut("execution(* *..find*(Long,..))")
public void argsDemo3(){}
//匹配第一个参数为Long类型的方法
@Pointcut("args(Long,..)")
public void argsDemo4(){}
参数匹配
//匹配任何以find开头而且只有一个Long参数的方法
@Pointcut("execution(* *.find*(Long))")
public void argsDemo1(){}
//匹配任何一个只有Long类型参数的方法
@Pointcut("args(Long)")
public void argsDemo2(){}
//匹配任何以find开头的而且第一个参数类型为Long的方法
@Pointcut("execution(* *..find*(Long,..))")
public void argsDemo3(){}
//匹配第一个参数为Long类型的方法
@Pointcut("args(Long,..)")
public void argsDemo4(){}