Spring的AOP之通过切点来选择连接点
切点用于准确定位应该在什么地方应用切面的通知。通知和切点是切面的最基本的元素。在Spring AOP中要使用AspectJ的切点表达式来定义切点。下面我们列出Spring AOP所支持的AspectJ切点指示器。
文章图片
AOP原理图
AspectJ指示器 | 描述 |
---|---|
arg() | 限定连接点匹配参数为指定类型的执行方法 |
@args() | 限定连接点匹配参数由指定注解标注的执行方法 |
execution() | 用于匹配连接点执行的方法 |
this() | 限定连接点匹配AOP代理的类型bean引用为指定类型的类 |
target() | 限定连接点匹配目标对象为指定类型的类 |
@target() | 限定连接点匹配特定的执行对象,这些对象对应的类要有指定类型的注解 |
within() | 限定匹配连接点指定的类型 |
@within() | 限定匹配连接点指定注解所标注的类型(当使用Spring AOP时,方法定义在指定的注解所标注的类里) |
@annotation | 限定匹配带有特定注解的连接点 |
1.编写切点 【Spring的AOP之通过切点来选择连接点】为了阐述Spring中的切面,我们要限定一个切点:
public interface Performance {public void perform();
}
下面我们定义一个表达式,设置当perform()执行时触发通知的调用:
文章图片
匹配表达式
execution(* concert.Perfirmance.perform(..))
第一个*代表匹配所有类型的返回值,中间的类名.方法名指定匹配的类的特定方法,()中的 .. 表示匹配所有的参数列表。
我们好可以在ececution中使用其他的匹配器,用来过滤匹配的方法:
execution(* concert.Perfirmance.perform(..) && within(concer.*))
上面的表达式表示匹配concert.Perfirmance的perform方法,并且该方法在concer包中。里面的&&表示与的意思,除此之外还有 || 表示或, ! 表示非。但是 & 在Xml中有特殊的含义,这时我们也可以使用 and 代替 && ,用 or 代替 || ,用 not 代替 !。
2.在切点中选择bean 处理上面;列出的指示器外,Spring还支持一种新的指示器bean(),它允许我们在切点中使用bean的ID来标示bean:
execution(* concert.Perfirmance.perform(..)and bean('woodstock'))
在这里我们限定了bean的ID为 woodstock,其实bean()指示器更多的使用场景是 除去特定ID的bean应用通知:
execution(* concert.Perfirmance.perform(..)and !bean('woodstock'))
在这种场景下,切面的通知会被编织到所有ID不为woodstock的bean中。本节我们大致介绍了切点的定义与几种使用场景,下节我们会学习如何编写通知和使用这些切点声明切面。
推荐阅读
- 右手悲伤
- 优秀的公司满足需求,伟大的公司创造需求
- 傀儡
- 想到,做到,很重要
- 魔力感恩之宇宙的线索
- 投稿|奈雪的茶,还没跑到拐点
- 基于设计稿识别的可视化低代码系统实践
- 依依短租|依依短租 九大不可错过的盛夏避暑胜地,人少景美,还不速来()
- 只要你想看到,都会看到
- 1队1组徐洋|1队1组徐洋 11/30