关于Spring AOP的AspectJ切点,最重要的一点就是Spring仅支持AspectJ切点指示器(pointcut designator)的一个子集。让咱们回顾下,Spring是基于代理的,而某些切点表达式是与基于代理的AOP无spa
关的。表4.1列出了Spring AOP所支持的AspectJ切点指示器。代理
当咱们查看如上所展现的这些Spring支持的指示器时,注意只有execution指示器是实际执行匹配的,而其余的指示器都是用来限制匹配的。这说明execution指示器是咱们在编写切点定义时最主要使用的指示器。在此基础上,咱们使用其余指示器来限制所匹配的切点。orm
为了阐述Spring中的切面,咱们须要有个主题来定义切面的切点。为此,咱们定义一个Performance接口:blog
Performance能够表明任何类型的现场表演,如舞台剧、电影或音乐会。假设咱们想编写Performance的perform()方法触发的通知。图4.4展示了一个切点表达式,这个表达式可以设置当perform()方接口
法执行时触发通知的调用。it
咱们使用execution()指示器选择Performance的perform()方法。方法表达式以“*”号开始,代表了咱们不关心方法返回值的类型。而后,咱们指定了全限定类名和方法名。对于方法参数列表,咱们使用两个点号(..)代表切点要选择任意的perform()方法,不管该方法的入参是什么。io
如今假设咱们须要配置的切点仅匹配concert包。在此场景下,可使用within()指示器来限制匹配,如图4.5所示。form
请注意咱们使用了“&&”操做符把execution()和within()指示器链接在一块儿造成与(and)关系(切点必须匹配全部的指示器)。相似地,咱们可使用“||”操做符来标识或(or)关系,而使用“!”操基础
做符来标识非(not)操做。配置
由于“&”在XML中有特殊含义,因此在Spring的XML配置里面描述切点时,咱们可使用and来代替“&&”。一样,or和not能够分别用来代替“||”和“!”。
除了表4.1所列的指示器外,Spring还引入了一个新的bean()指示器,它容许咱们在切点表达式中使用bean的ID来标识bean。bean()使用bean ID或bean名称做为参数来限制切点只匹配特定的bean。
在这里,咱们但愿在执行Performance的perform()方法时应用通知,但限定bean的ID为woodstock。
在某些场景下,限定切点为指定的bean或许颇有意义,但咱们还可使用非操做为除了特定ID之外的其余bean应用通知: