我有一个自定义注释如下:
@Inherited
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
}
在Spring XML配置中,我有以下内容:
<aop:pointcut id="fooPointcut" expression="@annotation(com.foo.blah.MyCustomAnnotation)"/>
这只会在方法注释上匹配。如何调整拼写以捕获类型/类注释?
答案 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}}切入点也限制了切入点。