Весна против аспектов в сторонних JAR - PullRequest
0 голосов
/ 11 ноября 2018

Члены-члены, похоже, в моем понимании есть некоторые серые области о том, как аспекты работают со Spring. Нужна ваша помощь в понимании нескольких вещей.

Недавно я работал над заданием, в котором написал специальную структуру ведения журнала / аудита. Часть регистрации / аудита должна выполняться до и после вызова бизнес-методов, поэтому Аспекты были естественным выбором для достижения этой цели. Я создал отдельный Java-проект, реализовал всю логику ведения журнала / аудита, упаковал проект в виде JAR (назовем его ABC.jar), и этот JAR используется другим проектом Java / Spring (давайте назовем этот проект PQR)

ABC.jar имеет аннотацию @AuditLoggable, и методы в PQR должны быть аннотированы этой аннотацией, чтобы выполнялась логика ведения журнала / аудита.

В Eclipse логика ведения журнала / аудита выполняется правильно до и после аннотированных методов @AuditLoggable, как только я добавляю ABC.jar в качестве зависимости в pom.xml.

Но когда я упаковал PQR в качестве JAR-файла с помощью maven и запустил свое приложение, я увидел, что логика ведения журнала / аудита вообще не выполнялась для методов, у которых над ними была аннотация.

Я искал некоторую помощь в Интернете и SO, и я нашел несколько ресурсов, которые указали, что мне нужно использовать «aspectj-maven-plugin», который вплетает аспекты в исходный код во время компиляции. Я обновил pom.xml и добавил требуемый плагин, опубликуйте, что мой код работает, и аспекты вызываются, как и ожидалось, когда PQR упакован как JAR.

Несколько вопросов -

1) Почему существует разница в поведении между тем, когда проект PQR запускается в Eclipse (основной класс загрузки Spring -> Запускать как Java-приложение), и тем, когда программа запускается через командную строку (чистый пакет mvn && java -jar { путь к PQR.jar}?

2) Так как мои аспекты присутствовали в стороннем JAR (ABC.jar), я должен был использовать плагин Maven, чтобы связать их с моим проектом. Но почему же аннотации, поставляемые с библиотеками Spring и Hibernate, работают из коробки? Почему мне не требуется этот шаг «ткачества», чтобы использовать аннотации из библиотек Spring / Hibernate? Даже эти библиотеки являются сторонними библиотеками с точки зрения моего проекта, верно?

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

Большое спасибо, ребята !!

...