Spring Aop切点

切点用于准肯定位应该在什么地方应用切面的通知。通知和切点是切面的最基本的元素。在Spring AOP中要使用AspectJ的切点表达式来定义切点。下面咱们列出Spring AOP所支持的AspectJ切点指示器。php

 
AOP原理图
AspectJ指示器 描述
arg() 限定链接点匹配参数为指定类型的执行方法
@args() 限定链接点匹配参数由指定注解标注的执行方法
execution() 用于匹配链接点执行的方法
this() 限定链接点匹配AOP代理的类型bean引用为指定类型的类
target() 限定链接点匹配目标对象为指定类型的类
@target() 限定链接点匹配特定的执行对象,这些对象对应的类要有指定类型的注解
within() 限定匹配链接点指定的类型
@within() 限定匹配链接点指定注解所标注的类型(当使用Spring AOP时,方法定义在指定的注解所标注的类里)
@annotation 限定匹配带有特定注解的链接点

在Spring 中尝试使用AspectJ其余的的指示器,将会抛出IllegalArgumentException异常。咱们看到在上面介绍的指示器中只有execution()是实际执行匹配的,而其余指示器都是限制匹配的。因此咱们一般使用execution指示器匹配,而后经过其余指示器进行限制。css

1.编写切点

为了阐述Spring中的切面,咱们要限定一个切点:java

public interface Performance { public void perform(); } 

下面咱们定义一个表达式,设置当perform()执行时触发通知的调用:this

 
匹配表达式
execution(* concert.Perfirmance.perform(..)) 

第一个*表明匹配全部类型的返回值,中间的类名.方法名指定匹配的类的特定方法,()中的 .. 表示匹配全部的参数列表。
咱们好能够在ececution中使用其余的匹配器,用来过滤匹配的方法:spa

execution(* concert.Perfirmance.perform(..) && within(concer.*)) 

上面的表达式表示匹配concert.Perfirmance的perform方法,而且该方法在concer包中。里面的&&表示与的意思,除此以外还有 || 表示或, ! 表示非。可是 & 在Xml中有特殊的含义,这时咱们也可使用 and 代替 && ,用 or 代替 || ,用 not 代替 !。3d

2.在切点中选择bean

处理上面;列出的指示器外,Spring还支持一种新的指示器bean(),它容许咱们在切点中使用bean的ID来标示bean:代理

execution(* concert.Perfirmance.perform(..)  and bean('woodstock')) 

在这里咱们限定了bean的ID为 woodstock,其实bean()指示器更多的使用场景是 除去特定ID的bean应用通知:code

execution(* concert.Perfirmance.perform(..)  and !bean('woodstock'))
做者:郭之源 连接:https://www.jianshu.com/p/0dc2eea8e59e 來源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
相关文章
相关标签/搜索