Spring AOP не применяется, если включен из внешнего jar с другим именем пакета - PullRequest
0 голосов
/ 02 мая 2018

У меня есть служба весенней загрузки, которая включала внешний проект в pom в качестве зависимости. Этот внешний проект в основном представляет собой банку с пружинным кодом AOP.

Базовый пакет в моем основном приложении, который включает эту внешнюю банку с пружинным кодом AOP, - x.y.z

Класс во внешнем банке, где находится совет @before, находится в пакете a.b.c С этим классом в пакете a.b.c он не распознается основным приложением, где я хочу использовать реализацию Spring AOP и применить аспект. Тем не менее, когда я меняю его пакет с a.b.c на x.y.z (чего я действительно не могу сделать в реальной жизни), он отлично работает.

Я знаю, что в весенней загрузочной службе, которая оказывается включающей службой, она сканирует все под корневым пакетом, указанным в классе приложения, в данном случае x.y.z, и поэтому аспект отлично работает, если его класс находится под x.y.z.

однако проблема в том, что этот весенний app jar будет использоваться во многих приложениях. Таким образом, изменение имени пакета, как это, не вариант.

Есть ли способ сделать это без изменения имени пакета класса, в котором находится код приложения Spring?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

То, что @kriegaex предлагает, является правильным. Кроме того, убедитесь, что вы используете @Component вместе с @Aspect. Поскольку @Aspect не является аннотацией Spring, Spring не распознает ее, и, следовательно, ваш аспект не будет зарегистрирован. Таким образом, использование @Component обязательно для получения аспектов работы в среде Spring.

0 голосов
/ 02 мая 2018

Возможно, компонентное сканирование активировано только для пакетов классов вашего приложения по умолчанию. Вы можете расширить его до нескольких пакетов, включая пакет аспектов:

Конфигурация в стиле XML:

<context:component-scan base-package="x.y.z, a.b.c" />

Конфигурация стиля аннотации:

@ComponentScan(basePackages = {"x.y.z", "a.b.c"})

Отказ от ответственности: я не пользователь Spring, а только эксперт AspectJ. Я просто знал, что вы можете настроить сканирование компонентов, гуглил синтаксис для вас и надеюсь, что он правильный.

...