Spring AOP Pointcut syntax for AND, OR and NOT

前端 未结 3 2076
半阙折子戏
半阙折子戏 2021-02-12 13:31

I\'m having trouble with a pointcut definition in Spring (version 2.5.6). I\'m trying to intercept all method calls to a class, except for a given method (someMethod in the exam

相关标签:
3条回答
  • 2021-02-12 13:56

    I'm also using spring 2.5.6 and was having a similar problem with OR not working, but AND was working. It turns out that or (in lowercase) does work, so there is clearly a bug in that code.

    It is interesting that the proper aspectJ syntax is &&, ||, and !, but the and/or/not syntax was added by spring to make working in xml easier. From the manual:

    When combining pointcut sub-expressions, '&&' is awkward within an XML document, and so the keywords 'and', 'or' and 'not' can be used in place of '&&', '||' and '!' respectively.

    I would guess that since && is the only one that is actually awkward in xml (there is nothing difficult about putting | or ! in xml) then AND is the only one that was properly tested

    0 讨论(0)
  • 2021-02-12 14:02

    i know its probably a bit late at this stage but ive been having the same issue and I resolved it by escaping the ampersand chars so its && ! instead of 'AND NOT' or '&& !'. I'm doing this in the xml file

    <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>
    

    This applies the advice to all methods executed in com.disney.goofy and that are not annotated with NonDisneyCharacter

    0 讨论(0)
  • 2021-02-12 14:04

    This should work (spring AOP reference):

    pointcut="execution(* x.y.z.ClassName.*(..))
              && !execution(* x.y.x.ClassName.someMethod(..))"
    
    0 讨论(0)
提交回复
热议问题