@AspectJ передбачає стиль оголошення аспектів як звичайних класів Java, анотованих анотаціями. Стиль @AspectJ був введений проектом AspectJ як частина релізу AspectJ 5. Spring інтерпретує ті ж інструкції, що й AspectJ 5, використовуючи бібліотеку, що поставляється AspectJ для синтаксичного аналізу та зіставлення зрізів. Однак середовище виконання АОП, як і раніше, є чистим Spring AOP, а будь-яка залежність від компілятора AspectJ або інструмента зв'язування відсутня.

, які дозволяють використовувати мову AspectJ повнофункціонально.

Увімкнення підтримки @AspectJ

Щоб використовувати аспекти @AspectJ у конфігурації Spring, необхідно включити підтримку Spring для конфігурування Spring AOP на основі аспектів @AspectJ та автопроксування бінів залежно від того, чи забезпечили їх порадами з цих аспектів чи ні. Під автопроксуванням ми маємо на увазі, що якщо Spring визначає, що бін забезпечений порадою по одному або декільком аспектам, він автоматично створює проксі для цього біна, щоб перехоплювати виклики методів та забезпечити виконання поради за необхідності.

Підтримка @AspectJ може бути активована за допомогою конфігурації у стилі XML або Java. У будь-якому випадку необхідно переконатися, що бібліотека aspectjweaver.jar з AspectJ знаходиться на шляху класів вашої програми (версія 1.8 або пізніша). Ця бібліотека доступна в каталозі lib дистрибутива AspectJ або з репозиторію Maven Central.

Увімкнення підтримки @AspectJ за допомогою конфігурації Java

Щоб активувати підтримку @AspectJ за допомогою @Configurationз Java, додайте інструкцію @EnableAspectJAutoProxy, як показано в наступному прикладі:

Java
@ Configuration @EnableAspectJAutoProxy public class AppConfig { }
Kotlin
@Configuration @EnableAspectJAutoProxy class AppConfig

Увімкнення підтримки @AspectJ за допомогою конфігурації XML

Щоб активувати підтримку @AspectJ за допомогою конфігурації на основі XML, використовуйте елемент aop:aspectj -autoproxy, як показано в наступному прикладі:

<aop:aspectj-autoproxy/>

Оголошення аспекту

При активованої підтримки @AspectJ будь-який бін, визначений у вашому контексті програми за допомогою класу, який є аспектом @AspectJ (має анотацію @Aspect), автоматично визначається Spring і використовується для конфігурування Spring AOP. Наступні два приклади демонструють просте визначення, необхідне для не надто корисного аспекту.

На першому з двох прикладів показано звичайне визначення біна в контексті програми, яка вказує на клас біна, що має анотацію @Aspect:

<bean id ="myAspect" class="org.xyz.NotVeryUsefulAspect"> <!-- налаштовуємо властивості аспекту тут --> </bean>

На другому з двох прикладів показано визначення класу NotVeryUsefulAspect, який анотований за допомогою анотації org .aspectj.lang.annotation.Aspect;

Java
package org.xyz; import org.aspectj.lang.annotation.Aspect; @Aspect public class NotVeryUsefulAspect { }
Kotlin
package org.xyz import org.aspectj.lang.annotation .Aspect; @Aspect class NotVeryUsefulAspect

Аспекти (класи, анотовані за допомогою @Aspect) можуть мати методи і поля, як і будь-який інший клас. Вони також можуть містити оголошення зрізів, порад і введень (міжтипових). сканування компонентів

Ви можете зареєструвати класи аспектів як звичайні біни в конфігурації Spring XML за допомогою методів, анотованих @Bean, у класах, помічених анотацією @Configuration, або зробити те щоб Spring автоматично виявляв їх у вигляді сканування шляху класів - як і, як і будь-який інший керований Spring бін. Однак зверніть увагу, що інструкції @Aspect недостатньо для автоматичного виявлення в дорозі класів. Для цього необхідно додати окрему інструкцію @Component (або, як варіант, спеціальну стереотипну інструкцію, яка відповідає правилам сканера компонентів Spring).