Spring AOP

Pointcut expression【切面表达式】

expression

  • designators
  • execution(),...
  • wildcards
  • *,..,+
  • operators
  • &&,||,!

注释:
wildcards

  • *:匹配任意数量的字符
  • +:匹配指定类及其子类
  • ..:匹配任意数的子包或者参数
image.png

匹配包、类(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(){}
标注问号的,表示可以省略

你可能感兴趣的:(Spring AOP)