AOP:两个@annotation子句的组合不起作用

时间:2014-04-14 20:42:33

标签: spring spring-aop

我正在尝试编写一个切入点,该切入点将针对标记有某个注释的每个方法进行命中,但标记为另一个注释的方法除外。 但以下情况不起作用:

<aop:aspect ref="...">
        <aop:before method="execute" pointcut="@annotation(MyAnnotation1) 
                  and not @annotation(MyAnnotation2)"/>
</aop:aspect>

请你告诉我我做错了什么?..

1 个答案:

答案 0 :(得分:0)

Spring AOP documentation

  

组合切入点子表达式时,&&在XML中很难处理   文档,因此可以使用关键字andornot代替   分别为&&||!

但是,不允许使用否定绑定参数。如果你说它不存在,那么什么值将作为参数传递?

将其更改为

<aop:before method="execute" pointcut="@annotation(MyAnnotation1) 
                  and not @annotation(com.example.MyAnnotationName)"/>

所以MyAnnotation1可以引用一个参数,但另一个则不能。因此,您需要指定注释类型的完全限定名称。相应的切入点看起来像

//@Pointcut(value = "@annotation(MyAnnotation1) && !@annotation(com.example.MyAnnotationName)")
public void yesNotNo(MyAnnotation1 MyAnnotation1) {
}