AOP Spring синтаксис Pointcut для И, ИЛИ и НЕТ

Я испытываю затруднения из-за pointcut определения в 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).

Кто-либо может дать какие-либо подсказки?

18
задан Odinodin 15 February 2010 в 15:15
поделиться

2 ответа

Я знаю, что это, вероятно, немного поздно на данном этапе, но у меня была такая же проблема, и я решил ее, избегая символов амперсанда, поэтому его && ! вместо '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

21
ответ дан 30 November 2019 в 08:21
поделиться

Это должно работать ( ссылка на Spring AOP ):

pointcut="execution(* x.y.z.ClassName.*(..))
          && !execution(* x.y.x.ClassName.someMethod(..))"
5
ответ дан 30 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: