AspectJ є аспектно-орієнтованим розширенням, створеним в Xerox PARC для програмування мовою Java. Воно доступне в проєкті Eclipse Foundation з відкритим кодом, як окремо, так і інтегроване з Eclipse. AspectJ стала широко використовуватися де-факто як стандарт для АОП, підкреслюючи простоту і зручність використання для кінцевих користувачів. Вона використовує Java-подібний синтаксис і включає IDE інтеграції для відображення наскрізних структур з моменту її початкового публічного випуску в 2001 році.
Опис мови
Основні можливості Всі діючі програми Java є діючими програмами AspectJ, але AspectJ також дозволяє програмістам визначити спеціальні конструкції, так звані аспекти. Аспекти можуть містити декілька особливостей не притаманних стандартним класам: міжтипові оголошення (англ. inter-type declarations) — дозволяють додавати методи, поля, або інтерфейси для існуючих класів всередині аспекта; розріз () — дозволяє програмісту вказати точки з'єднання (чітко визначені моменти у виконанні програми, як виклик методу, доступ до змінних). Всі розрізи є виразами для визначення точки перетину. Наприклад, цей розріз відповідає за виконання будь-якого методу в об'єкті типу Point, чиє ім'я починається з set: pointcut set() : execution(* set*(..) ) && this(Point); порада () — дозволяє програмісту вказати код для запуску в точці перетину (). Дії можуть бути виконані до, після або навколо зазначеної точки перетину. Тут порада оновлює дисплей кожного разу, коли щось встановлено на Point, використовуючи розріз, оголошений вище: after () : set() { Display.update();
Приклад визначення аспекту на мові AspectJ aspect Logging { // аспект, який представляє поведінку реєстрації pointcut AnyCall (): // назва зрізу call (void MyClass. * (..)); before (): AnyCall () { System.out.println ("Hello" + thisJoinPoint)
after (): AnyCall () { System.out.println ("Bye" + thisJoinPoint)
Даний аспект вводить функціональність для протоколювання в клас MyClass . Перед кожним викликом кожного методу M він виконує пораду, яка виводить повідомлення виду: Hello M, — а після кожного виклику M — пораду, яка виводить аналогічне завершальне повідомлення: Bye M.
В реалізаціях порад використаний об'єкт thisJoinPoint, який пов'язує пораду з точкою приєднання в цільовій програмі і надає різноманітні можливості для обробки контексту точки приєднання. У прикладі використана лише найпростіша з них — неявний виклик методу thisJoinPoint.toString (), який повертає фактичне ім'я цільового методу, знайденого за допомогою розрізу. Розрізи можуть бути також параметризовані, приватні та абстрактні.
Інтеграція з середовищем розробки +Інтеграція AspectJ з середовищем розробкиВихідний кодКомпіляторКонтрольКомпонуванняРозгортанняВиконанняРозширені формати .java або .ajІнкрементний компілятор аспектівПовний статичний контрольПід час компіляції і завантаження; формується байт-к одСтатичне розгортанняПроста java-програма
Підтримка IDE, бібліотеки і документація +AspectJ. Підтримка IDE, бібліотеки і документаціяIDEРедакторВікна переглядуВідлагоджувачІншеБібліотекиДокументаціяeclipse jdeveloper
jbuilder
netbeansПідсвічування синтаксису, контекстна підказка, посилання на порадиЗагальний вигляд, візуалізатор, перехресні посиланняЗвичайний java-відлаголжувачajdoc, ajbrowserВідсутніЄ багато документації
Основні компоненти архітектури системи AspectJ ajc — компілятор AspectJ. Він компілює вихідний код на мові AspectJ (мові Java, розширеному засобами АОП) в Java-байткод, «зрозумілий» звичайній віртуальній машині Java (JVM, запускаємо командою java). Компілятор ajc доступний як в командному режимі, з великим набором опцій, так і через інтегроване середовище;
ajdoc — утиліта, аналогічна утиліті javadoc з JDK, яка генерує гіпертекстову HMTL-документацію в стилі javadoc по вихідному коді аспектно-орієнтованої програми, написаної на мові AspectJ. Документація містить опис структури наскрізних функціональностей, використаних в програмі;
ajbrowser — браузер AspectJ, графічний користувацький інтерфейс для візуалізації аспектів, їх взаємозв'язків і структури наскрізних функціональностей в програмі. Браузер AspectJ дозволяє викликати компілятор ajc для компіляції програм на AspectJ. Проте в браузері AspectJ відсутня функціональність для вибору або скасування вибору точок приєднання аспектів; AspectJ ant tasks — інструмент підтримки процесу складання програм для популярного інструменту збірки програм на Java — Apache ant, аналога утиліти make; AspectJ load-time weaver — впроваджувальний завантажувач класів, утиліта, що виконує «відкладене» впровадження аспектів при загрузці в JVM відповідного класу. Можлива розробка і додавання в систему впровадження агентів часу завантаження (load-time weaving agents), які вирішують ту ж задачу. AspectJ також підтримує впровадження під час компіляції (яке виконується після того, як компілятор ajc транслює одиницю компіляції AspectJ) і впровадження після компіляції (при якому як вхідна інформація для впровадження аспектів використовуються готовий бінарний клас-файл або jar-архів).
Див. також Аспектно-орієнтоване програмування, АОП Spring Framework AspectC++
Примітки
Посилання Домашня сторінка AspectJ Керівництво по програмуванню AspectJ AJDT: Засоби розробки AspectJ