AspectJ

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

AspectJ є аспектно-орієнтованим розширенням, створеним в Xerox PARC для програмування мовою Java. Воно доступне в проекті Eclipse Foundation з відкритим кодом, як окремо, так і інтегроване з Eclipse. AspectJ стала широко використовуватися де-факто як стандарт для АОП, підкреслюючи простоту і зручність використання для кінцевих користувачів. Вона використовує Java-подібний синтаксис і включає IDE інтеграції для відображення наскрізних структур з моменту її початкового публічного випуску в 2001 році.

Опис мови[ред.ред. код]

Основні можливості[ред.ред. код]

Всі діючі програми Java є діючими програмами AspectJ, але AspectJ також дозволяє програмістам визначити спеціальні конструкції, так звані аспекти. Аспекти можуть містити декілька особливостей не притаманних стандартним класам:

  • міжтипові оголошення (англ. inter-type declarations) — дозволяють додавати методи, поля, або інтерфейси для існуючих класів всередині аспекта;
  • розріз (англ. pointcut) — дозволяє програмісту вказати точки з'єднання (чітко визначені моменти у виконанні програми, як виклик методу, доступ до змінних). Всі розрізи є виразами для визначення точки перетину.Наприклад, цей розріз відповідає за виконання будь-якого методу в об'єкті типу Point, чиє ім'я починається з set:
pointcut set() : execution(* set*(..) ) && this(Point);
  • порада (англ. advice) — дозволяє програмісту вказати код для запуску в точці перетину (англ. joinpoint). Дії можуть бути виконані до, після або навколо зазначеної точки перетину. Тут порада оновлює дисплей кожного разу, коли щось встановлено на 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 (), який повертає фактичне ім'я цільового методу, знайденого за допомогою розрізу. Розрізи можуть бути також параметризовані, приватні та абстрактні.

Інтеграція з середовищем розробки [1][ред.ред. код]

Інтеграція AspectJ з середовищем розробки
Вихідний код Компілятор Контроль Компонування Розгортання Виконання
Розширені формати .java або .aj Інкрементний компілятор аспектів Повний статичний контроль Під час компіляції і завантаження; формується байт-к од Статичне розгортання Проста java-програма

Підтримка IDE, бібліотеки і документація [2][ред.ред. код]

AspectJ. Підтримка IDE, бібліотеки і документація
IDE Редактор Вікна перегляду Відлагоджувач Інше Бібліотеки Документація
eclipse

jdeveloper

jbuilder

netbeans

Підсвічування синтаксису,

контекстна підказка,

посилання на поради

Загальний вигляд,

візуалізатор,

перехресні посилання

Звичайний java-відлаголжувач ajdoc,

ajbrowser

Відсутні Є багато документації

Основні компоненти архітектури системи AspectJ [3][ред.ред. код]

  • 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-архів).

Див. також[ред.ред. код]

Посилання[ред.ред. код]