用于 AND、OR 和 NOT 的 Spring AOP 切入点语法

标签 spring aop 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>

不过,拦截器也会为 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..*.*(..)) &amp;&amp; !@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/

相关文章:

java - Spring AOP - 异常 : org. springframework.beans.factory.BeanDefinitionStoreException:

spring - 如何使用带注释的参数将参数传递给 Spring AOP 建议?

java - Spring AOP问题

java - SLF4J的多重绑定(bind)

Java CountDownLatch 不解锁?为什么最后一行不打印?

spring - 我可以使用AOP注解在spring中注入(inject)代码吗?

java - 如何使方面在方法 AService.methodB() 上工作?

java - Spring ViewResolver : no mapping found for HTTP request with URI

java - 在 spring servlet.xml 中添加我所有的 bean

java - @Cacheable 不起作用