AspectJ – Wprowadzenie
AspectJ jest rozszerzeniem języka Java, które wprowadza paradygmat programowania aspektowego. Opracowane przez zespół dr. Gregora Kiczalesa w Xerox PARC, pierwsza publiczna wersja ukazała się w 2001 roku.
Podstawowe założenia
W programowaniu obiektowym, tak jak w Javie, główną jednostką modularności jest klasa. AspectJ dodaje aspekt jako nową jednostkę, która pozwala na implementację zagadnień dotyczących więcej niż jednej klasy. Kluczowym celem AspectJ jest separacja zagadnień i rozdzielenie kodu na niezależne funkcjonalnie części. Przecinanie struktur modularnych w AspectJ dzieli się na:
- Statyczne: modyfikujące strukturę klas.
- Dynamiczne: zmieniające zachowanie programu.
Składnia
AspectJ wprowadza nowe elementy składni, takie jak:
- Punkty złączeń (joinpoints)
- Punkty przecięcia (pointcuts)
- Rady (advices)
- Aspekty
Punkty złączeń (joinpoints)
Punkty złączeń są atomowymi jednostkami opisu w programowaniu aspektowym, a ich typowe przykłady to:
- Wykonanie metody lub konstruktora.
- Odwołanie do pola w klasie.
- Obsługa wyjątku.
Punkty przecięcia (pointcuts)
Punkty przecięcia grupują zbiory punktów złączeń. Mogą być dzielone na:
- Proste punkty przecięcia: zbudowane z jednej klauzuli.
- Punkty złożone: używają negacji, alternatywy lub koniunkcji.
Rady (advices)
Rady to bloki kodu wykonywane w momentach napotkania punktów przecięcia. Można je klasyfikować na:
- before(): wykonywana przed punktem przecięcia.
- after(): wykonywana po punkcie przecięcia.
- around(): umożliwia zastąpienie oryginalnego kodu.
Aspekty
Aspekt jest główną jednostką modularności w AspectJ. Można go traktować jako wyspecjalizowaną klasę, która może przecinać implementację oraz modyfikować jej strukturę. Aspekty są zapisywane w plikach z rozszerzeniem „.aj”.
Tkanie (Weaving)
Tkanie to proces łączenia logiki obiektowej i aspektowej w wynikowym kodzie binarnym. Istnieją trzy metody tkania:
- Tkanie w czasie kompilacji
- Tkanie po kompilacji
- Tkanie w czasie ładowania
AJDT
AJDT (AspectJ Development Tools) to wtyczka do Eclipse, która wspomaga pisanie kodu aspektowego, umożliwiając m.in. edycję plików źródłowych, analizę referencji oraz wizualizację punktów cięcia.