Він не призначений як повне рішення AOP – його можна застосовувати лише до bean-компонентів, якими керує контейнер Spring. AspectJ — це оригінальна технологія АОП, яка має на меті забезпечити повне рішення АОП. Він використовує плетіння під час виконання.
Якщо вам потрібно повідомити об’єкти, якими не керує контейнер Spring (як правило, об’єкти домену), вам потрібно використовувати AspectJ. Вам також потрібно використовувати AspectJ, якщо ви бажаєте порадити точки з’єднання, відмінні від виконання простих методів (наприклад, поля отримати або встановити точки з’єднання тощо).
Компілятор AspectJ потребує JDK 17+ під час збирання. Під час виконання AspectJ все ще вимагає лише Java 8+ як для компіляції, так і для переплетення під час завантаження. Чистий код Java можна скомпілювати до старого рівня коду 1,3 байта.
З іншого боку, AspectJ вплітає аспекти в основний код перед виконанням програми, тому немає додаткових витрат на час виконання, на відміну від Spring AOP. З цих причин тести показують, що AspectJ є майже в 8-35 разів швидше, ніж Spring AOP.
Він досі використовується в основному для реєстрації та відкриття/закриття перекладів бази даних кількома фреймворками Java (Весна, наприклад, Ру). Проблема з AOP полягає в тому, що якщо ви зловживаєте ним, вашу програму буде важко підтримувати.