AspectJ切点表达式

@AspectJ 支持三种通配符

* 匹配任意字符,只匹配一个元素

.. 匹配任意字符,可以匹配多个元素 ,在表示类时,必须和 * 联合使用

+ 表示按照类型匹配指定类的所有类,必须跟在类名后面,如 com.cad.Car+ ,表示继承该类的所有子类包括本身

逻辑运算符

切点表达式由切点函数组成,切点函数之间还可以进行逻辑运算,组成复合切点。

  • &&:与操作符。相当于切点的交集运算。xml配置文件中使用切点表达式,&是特殊字符,所以需要转义字符&;来表示。

  • ||:或操作符。相当于切点的并集运算。

  • !:非操作符,相当于切点的反集运算。

Spring支持9个@AspectJ切点表达式函数,它们用不同的方式描述目标类的连接点。我们来了解几个常用的

execution()

execution() 是最常用的切点函数,用来匹配方法

语法:
execution(<修饰符><返回类型><包.类.方法(参数)><异常>) 
修饰符和异常可以省略。
使用例子
  • execution(public * *(..)) :匹配目标类的所有public方法,第一个*代表返回类型,第二个*代表方法名,..代表方法的参数。

  • execution(**User(..)) :匹配目标类所有以User为后缀的方法。第一个*代表返回类型,*User代表以User为后缀的方法

  • execution(* com.cad.demo.User.*(..)) :匹配User类里的所有方法

  • execution(* com.cad.demo.User+.*(..)) :匹配该类的子类包括该类的所有方法

  • execution(* com.cad.*.*(..)) :匹配com.cad包下的所有类的所有方法

  • execution(* com.cad..*.*(..)) :匹配com.cad包下、子孙包下所有类的所有方法

  • execution(* addUser(Spring, int)) :匹配addUser方法,且第一个参数类型是String,第二个参数类型是int

args()

args()函数接受一个类名,表示目标类方法参数是指定类时(包含子类),则匹配切点。

args(com.cad.User) :匹配addUser(User user)方法等

within()

匹配类

语法:
within(<类>)

within(com.cad.User) :匹配User类下的所有方法

target()

target()函数通过判断目标类是否按类型匹配指定类决定连接点是否匹配。

target(com.cad.User) :如果目标类类型是User没那么目标类所有方法都匹配切点。

this()

this()函数判断代理对象的类是否按类型匹配指定类。

你可能感兴趣的:(AspectJ切点表达式)