我在 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>
不过,拦截器也会为 someMethod 调用。
然后我尝试了这个:
<aop:config>
<aop:advisor
pointcut="execution(* x.y.z.ClassName.(* AND NOT someMethod)(..)) )"
/>
</aop:config>
但这不能编译,因为它不是有效的语法(我得到一个 BeanCreationException)。
谁能给点建议?
最佳答案
我知道在这个阶段可能有点晚了,但我遇到了同样的问题,我通过转义 & 字符来解决它,所以它的 && !
而不是 'AND NOT' 或 '&& !'。
我在 xml 文件中这样做
<aop:config>
<aop:pointcut id="blah" expression="execution(* com.disney.goofy..*.*(..)) && !@annotation(com.disney.goofy.NonDisneyCharacter)"/>
<aop:advisor advice-ref="transAdvice" pointcut-ref="blah"/>
</aop:config>
这会将建议应用于在 com.disney.goofy 中执行且未使用 NonDisneyCharacter 注释的所有方法
关于用于 AND、OR 和 NOT 的 Spring AOP 切入点语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266850/