Я испытываю затруднения из-за 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).
Кто-либо может дать какие-либо подсказки?
Я знаю, что это, вероятно, немного поздно на данном этапе, но у меня была такая же проблема, и я решил ее, избегая символов амперсанда, поэтому его && !
вместо '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
Это должно работать ( ссылка на Spring AOP ):
pointcut="execution(* x.y.z.ClassName.*(..))
&& !execution(* x.y.x.ClassName.someMethod(..))"