自定义注释上的Spring切入点XML表达式

时间:2016-01-20 23:58:06

标签: spring aop aspectj

我有一个自定义注释如下:

@Inherited
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
}

在Spring XML配置中,我有以下内容:

            <aop:pointcut id="fooPointcut" expression="@annotation(com.foo.blah.MyCustomAnnotation)"/>

这只会在方法注释上匹配。如何调整拼写以捕获类型/类注释?

1 个答案:

答案 0 :(得分:3)

使用@within(com.foo.blah.MyCustomAnnotation)

  

限制匹配以连接具有给定注释的类型中的点

组合切入点表达式将成为:

@annotation(com.foo.blah.MyCustomAnnotation) || @within(com.foo.blah.MyCustomAnnotation)

请参阅Join Point Matching based on Annotations中的AspectJ 5 Developer's Notebook以获取进一步的参考。另请注意,Spring's AOP不支持完整的AspectJ切入点,只支持limited subset

另请注意,AspectJ 中的@annotation(com.foo.blah.MyCustomAnnotation) 将匹配

  

连接点的主题具有给定注释的所有连接点

意味着它匹配方法执行 以及方法调用 。在Spring AOP中它只匹配方法执行,但是编写在更广泛范围内有效的切入点表达式会更好,所以不要忘记使用{ {1}}切入点也限制了切入点。