AND,OR和NOT的Spring AOP Pointcut语法

Odi*_*din 18 aop spring spring-aop

我在Spring(版本2.5.6)中使用切入点定义时遇到了问题.我试图拦截对类的所有方法调用,除了给定的方法(下面的例子中的someMethod).

<aop:config>
    <aop:advisor
         pointcut="execution(* x.y.z.ClassName.*(..)) AND NOT
                   execution(* x.y.x.ClassName.someMethod(..))"
    />
</aop:config>
Run Code Online (Sandbox Code Playgroud)

但是,也会为someMethod调用拦截器.

然后我尝试了这个:

<aop:config>
    <aop:advisor
         pointcut="execution(* x.y.z.ClassName.(* AND NOT someMethod)(..)) )"
    />
</aop:config>
Run Code Online (Sandbox Code Playgroud)

但这不能编译,因为它不是有效的语法(我得到一个BeanCreationException).

任何人都可以提供任何建议吗?

小智 21

我知道它在这个阶段可能有点晚了但我一直有同样的问题,我通过逃避&符号来解决它,&amp;&amp; !而不是'AND NOT'或'&&!'.我在xml文件中这样做

<aop:config>
    <aop:pointcut id="blah" expression="execution(* com.disney.goofy..*.*(..)) &amp;&amp; !@annotation(com.disney.goofy.NonDisneyCharacter)"/>
    <aop:advisor advice-ref="transAdvice" pointcut-ref="blah"/>
</aop:config>
Run Code Online (Sandbox Code Playgroud)

这将建议应用于com.disney.goofy中执行的所有方法,并且未使用NonDisneyCharacter注释


cru*_*dog 5

这应该可以工作(spring AOP参考):

pointcut="execution(* x.y.z.ClassName.*(..))
          && !execution(* x.y.x.ClassName.someMethod(..))"
Run Code Online (Sandbox Code Playgroud)

  • 恐怕这是行不通的。请注意,Spring参考中的&amp;&amp;&gt; AND和!&gt;不在XML文件中。还是谢谢你的提示:) (2认同)