码迷,mamicode.com
首页 > 其他好文 > 详细

通过切点来选择连接点

时间:2018-05-01 23:21:44      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:回顾   cer   ima   操作符   定义   假设   通知   选择   技术分享   

关于Spring AOP的AspectJ切点,最重要的一点就是Spring仅支持AspectJ切点指示器(pointcut designator)的一个子集。让我们回顾下,Spring是基于代理的,而某些切点表达式是与基于代理的AOP无

关的。表4.1列出了Spring AOP所支持的AspectJ切点指示器。

 

技术分享图片

 

当我们查看如上所展示的这些Spring支持的指示器时,注意只有execution指示器是实际执行匹配的,而其他的指示器都是用来限制匹配的。这说明execution指示器是我们在编写切点定义时最主要使用的指示器。在此基础上,我们使用其他指示器来限制所匹配的切点。

 

1.1编写切点

为了阐述Spring中的切面,我们需要有个主题来定义切面的切点。为此,我们定义一个Performance接口:

技术分享图片

Performance可以代表任何类型的现场表演,如舞台剧、电影或音乐会。假设我们想编写Performance的perform()方法触发的通知。图4.4展现了一个切点表达式,这个表达式能够设置当perform()方

法执行时触发通知的调用。

技术分享图片

 

我们使用execution()指示器选择Performance的perform()方法。方法表达式以“*”号开始,表明了我们不关心方法返回值的类型。然后,我们指定了全限定类名和方法名。对于方法参数列表,我们使用两个点号(..)表明切点要选择任意的perform()方法,无论该方法的入参是什么。

 

现在假设我们需要配置的切点仅匹配concert包。在此场景下,可以使用within()指示器来限制匹配,如图4.5所示。

 

技术分享图片

 

请注意我们使用了“&&”操作符把execution()和within()指示器连接在一起形成与(and)关系(切点必须匹配所有的指示器)。类似地,我们可以使用“||”操作符来标识或(or)关系,而使用“!”操

作符来标识非(not)操作。

因为“&”在XML中有特殊含义,所以在Spring的XML配置里面描述切点时,我们可以使用and来代替“&&”。同样,or和not可以分别用来代替“||”和“!”。

 

1.2在切点中选择bean

除了表4.1所列的指示器外,Spring还引入了一个新的bean()指示器,它允许我们在切点表达式中使用bean的ID来标识bean。bean()使用bean ID或bean名称作为参数来限制切点只匹配特定的bean。

 

技术分享图片

在这里,我们希望在执行Performance的perform()方法时应用通知,但限定bean的ID为woodstock。

在某些场景下,限定切点为指定的bean或许很有意义,但我们还可以使用非操作为除了特定ID以外的其他bean应用通知:

 

技术分享图片

 

通过切点来选择连接点

标签:回顾   cer   ima   操作符   定义   假设   通知   选择   技术分享   

原文地址:https://www.cnblogs.com/duan2/p/8977413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!