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 ()
, який повертає фактичне ім'я цільового методу, знайденого за допомогою розрізу. Розрізи можуть бути також параметризовані, приватні та абстрактні.
Інтеграція з середовищем розробки
Вихідний код | Компілятор | Контроль | Компонування | Розгортання | Виконання |
---|---|---|---|---|---|
Розширені формати .java або .aj | Інкрементний компілятор аспектів | Повний статичний контроль | Під час компіляції і завантаження; формується байт-к од | Статичне розгортання | Проста java-програма |
Підтримка 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-архів).
Див. також
Примітки
- . Архів оригіналу за 30 вересня 2015. Процитовано 10 грудня 2014.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - (PDF). Архів оригіналу (PDF) за 16 березня 2015. Процитовано 10 грудня 2014.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title ()
Посилання
- Домашня сторінка AspectJ [Архівовано 25 серпня 2011 у WebCite]
- Керівництво по програмуванню AspectJ [ 24 травня 2014 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
AspectJ ye aspektno oriyentovanim rozshirennyam stvorenim v Xerox PARC dlya programuvannya movoyu Java Vono dostupne v proyekti Eclipse Foundation z vidkritim kodom yak okremo tak i integrovane z Eclipse AspectJ stala shiroko vikoristovuvatisya de fakto yak standart dlya AOP pidkreslyuyuchi prostotu i zruchnist vikoristannya dlya kincevih koristuvachiv Vona vikoristovuye Java podibnij sintaksis i vklyuchaye IDE integraciyi dlya vidobrazhennya naskriznih struktur z momentu yiyi pochatkovogo publichnogo vipusku v 2001 roci Opis moviOsnovni mozhlivosti Vsi diyuchi programi Java ye diyuchimi programami AspectJ ale AspectJ takozh dozvolyaye programistam viznachiti specialni konstrukciyi tak zvani aspekti Aspekti mozhut mistiti dekilka osoblivostej ne pritamannih standartnim klasam mizhtipovi ogoloshennya angl inter type declarations dozvolyayut dodavati metodi polya abo interfejsi dlya isnuyuchih klasiv vseredini aspekta rozriz angl pointcut dozvolyaye programistu vkazati tochki z yednannya chitko viznacheni momenti u vikonanni programi yak viklik metodu dostup do zminnih Vsi rozrizi ye virazami dlya viznachennya tochki peretinu Napriklad cej rozriz vidpovidaye za vikonannya bud yakogo metodu v ob yekti tipu Point chiye im ya pochinayetsya z set pointcut set execution set amp amp this Point porada angl advice dozvolyaye programistu vkazati kod dlya zapusku v tochci peretinu angl joinpoint Diyi mozhut buti vikonani do pislya abo navkolo zaznachenoyi tochki peretinu Tut porada onovlyuye displej kozhnogo razu koli shos vstanovleno na Point vikoristovuyuchi rozriz ogoloshenij vishe after set Display update Priklad viznachennya aspektu na movi AspectJ aspect Logging aspekt yakij predstavlyaye povedinku reyestraciyi pointcut AnyCall nazva zrizu call void MyClass before AnyCall System out println Hello thisJoinPoint after AnyCall System out println Bye thisJoinPoint Danij aspekt vvodit funkcionalnist dlya protokolyuvannya v klas MyClass Pered kozhnim viklikom kozhnogo metodu M vin vikonuye poradu yaka vivodit povidomlennya vidu Hello M a pislya kozhnogo vikliku M poradu yaka vivodit analogichne zavershalne povidomlennya Bye M V realizaciyah porad vikoristanij ob yekt thisJoinPoint yakij pov yazuye poradu z tochkoyu priyednannya v cilovij programi i nadaye riznomanitni mozhlivosti dlya obrobki kontekstu tochki priyednannya U prikladi vikoristana lishe najprostisha z nih neyavnij viklik metodu thisJoinPoint toString yakij povertaye faktichne im ya cilovogo metodu znajdenogo za dopomogoyu rozrizu Rozrizi mozhut buti takozh parametrizovani privatni ta abstraktni Integraciya z seredovishem rozrobki Integraciya AspectJ z seredovishem rozrobki Vihidnij kod Kompilyator Kontrol Komponuvannya Rozgortannya Vikonannya Rozshireni formati java abo aj Inkrementnij kompilyator aspektiv Povnij statichnij kontrol Pid chas kompilyaciyi i zavantazhennya formuyetsya bajt k od Statichne rozgortannya Prosta java programa Pidtrimka IDE biblioteki i dokumentaciya AspectJ Pidtrimka IDE biblioteki i dokumentaciya IDE Redaktor Vikna pereglyadu Vidlagodzhuvach Inshe Biblioteki Dokumentaciya eclipse jdeveloper jbuilder netbeans Pidsvichuvannya sintaksisu kontekstna pidkazka posilannya na poradi Zagalnij viglyad vizualizator perehresni posilannya Zvichajnij java vidlagolzhuvach ajdoc ajbrowser Vidsutni Ye bagato dokumentaciyiOsnovni komponenti arhitekturi sistemi AspectJajc kompilyator AspectJ Vin kompilyuye vihidnij kod na movi AspectJ movi Java rozshirenomu zasobami AOP v Java bajtkod zrozumilij zvichajnij virtualnij mashini Java JVM zapuskayemo komandoyu java Kompilyator ajc dostupnij yak v komandnomu rezhimi z velikim naborom opcij tak i cherez integrovane seredovishe ajdoc utilita analogichna utiliti javadoc z JDK yaka generuye gipertekstovu HMTL dokumentaciyu v stili javadoc po vihidnomu kodi aspektno oriyentovanoyi programi napisanoyi na movi AspectJ Dokumentaciya mistit opis strukturi naskriznih funkcionalnostej vikoristanih v programi ajbrowser brauzer AspectJ grafichnij koristuvackij interfejs dlya vizualizaciyi aspektiv yih vzayemozv yazkiv i strukturi naskriznih funkcionalnostej v programi Brauzer AspectJ dozvolyaye viklikati kompilyator ajc dlya kompilyaciyi program na AspectJ Prote v brauzeri AspectJ vidsutnya funkcionalnist dlya viboru abo skasuvannya viboru tochok priyednannya aspektiv AspectJ ant tasks instrument pidtrimki procesu skladannya program dlya populyarnogo instrumentu zbirki program na Java Apache ant analoga utiliti make AspectJ load time weaver vprovadzhuvalnij zavantazhuvach klasiv utilita sho vikonuye vidkladene vprovadzhennya aspektiv pri zagruzci v JVM vidpovidnogo klasu Mozhliva rozrobka i dodavannya v sistemu vprovadzhennya agentiv chasu zavantazhennya load time weaving agents yaki virishuyut tu zh zadachu AspectJ takozh pidtrimuye vprovadzhennya pid chas kompilyaciyi yake vikonuyetsya pislya togo yak kompilyator ajc translyuye odinicyu kompilyaciyi AspectJ i vprovadzhennya pislya kompilyaciyi pri yakomu yak vhidna informaciya dlya vprovadzhennya aspektiv vikoristovuyutsya gotovij binarnij klas fajl abo jar arhiv Div takozhAspektno oriyentovane programuvannya AOP Spring Framework AspectC Primitki Arhiv originalu za 30 veresnya 2015 Procitovano 10 grudnya 2014 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya PDF Arhiv originalu PDF za 16 bereznya 2015 Procitovano 10 grudnya 2014 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya PosilannyaDomashnya storinka AspectJ Arhivovano 25 serpnya 2011 u WebCite Kerivnictvo po programuvannyu AspectJ 24 travnya 2014 u Wayback Machine