Spring AOP - исключить определенные аспекты?

Я использую Spring 3.0.5, и мне было интересно, возможно ли каким-то образом исключить из загрузки классы аспектов, которые были аннотированы стереотипом @Aspect, но в то же время включить другие аннотированные классы аспектов? Кажется, что все или ничего, если вы идете по маршруту аннотаций (которым я и являюсь), я пытался посмотреть и, похоже, не нашел ничего, что намекало бы на это.

Причина этого в том, что у меня есть центральная основная библиотека, которая содержит аспекты, но я, возможно, не захочу включать эти аспекты в каждый проект, который я создаю с использованием этой центральной библиотеки.

Спасибо.


person Kevin    schedule 09.12.2010    source источник


Ответы (1)


Это долго ждать ответа...

Если вы используете аннотации AspectJ с Spring AOP, а не со средой выполнения AspectJ или плетением во время компиляции, вам повезло. Spring будет подбирать аннотированные классы @Aspect только в том случае, если они также аннотированы чем-то вроде @Component. Spring не считает @Aspect кандидатом на сканирование компонентов. Если вы используете XML-конфигурацию, просто удалите этот bean-компонент из своей конфигурации.

Я бы посоветовал НЕ использовать сканирование компонентов, которое повредило бы основную библиотеку. Например, если ваше приложение — com.example.myapp1, а основная библиотека — com.example.corelibrary.*, убедитесь, что при сканировании компонентов проверяется ТОЛЬКО com.example.myapp1, а не com.example.

Именно по этой причине небезопасно сканировать компоненты за пределами базового пакета вашего приложения. Вставьте отдельные аспекты с конфигурацией XML для bean-компонента.

person Aaron Douglas    schedule 06.12.2011