Spring AOP - Podstawowe koncepcje

Progamowanie zorientowane na aspekt. Tak można krótko opisać to czemu poświęcamy ten rozdział. A poświęcamy go programowaniu, które nie jest skupione na klasie jako podstawowej jednostce tworzenia kodu, ale raczej na wydzielaniu pewnych problemów (aspektów), które przekrojowo działają na wiele typów i obiektów (np. zarządzanie transakcjami).

Spring umożliwia nam korzystanie z AOP na dwa sposoby:

  • poprzez używanie deklaratywnych usług (jak choćby wspomniane zarządzanie transakcjami)
  • poprzez tworzenie własnych (customowych) aspektów

Koncepcje AOP i ich realizacja w Spring AOP

Realizacja założeń AOP możliwa jest poprzez zastosowanie koncepcji:

  • Aspekt (Aspect)

    Wspomniana na początku modularyzacja problemu obejmującego (przecinającego) wiele klas.

    Spring AOP: Realizacja przez użycie regularnych klas, bądź klas adnotowanych @AspectJ.
  • Punkt złączenia (Join point)

    Punkt podczas wykonywania programu, w którym następuje wykonanie metody lub obsługa wyjątku.

    Spring AOP: Realizacja przez wyznaczenie punktu na wykonaniu metody (zawsze).
  • Porada (Advice)

    Moment działania aspektu (określony przez punkt połączenia), taki jak: dookoła (around), przed (before), po (after).
    Na przykład: dookoła wywołania metody, przed wykonaniem metody, po wykonaniu metody.

    Spring AOP: Realizacja przez przechwycenie (interception) właściwego momentu działania wraz
    z utrzymaniem łancucha interceptorów zgromaczonych wokół punku złączenia.
  • Punkt przecięcia (Pointcut)

    Warunek określający wystąpienie punktu złączenia, w którym należy uruchomić odpowiednią poradę.

    Spring AOP: Realizacja przez użycie wyrażeń punktów języka AspectJ.
  • Wprowadzenie (Introduction)

    Deklarowanie dodatkowych metod lub pól w imieniu typu, które mogą być pomocne podczas stosowania porady.

    Spring AOP: Realizacja pojęcia umowy między typami w ramach AspectJ.
  • Obiekt docelowy (Target object)

    Obiekt, któremu "doradza" przynajmniej jeden obiekt (posiada przynajmniej jedną poradę).

    Spring AOP: Realizacja poprzez użycie proxy (wspomniany obiekt jest zawsze obiektem proxy).
  • Proxy AOP (AOP proxy)

    Obiekt stworzony w celu implementacji umów aspektu (sposobów doradzania w kontekście wykonywania metody)

    Spring AOP: Realizacja poprzez dynamiczne proxy JDK lub proxy CGLIB.
  • Tkanie (Weaving)

    Łączenie aspektów w określonym czasie z obiektami w celu utworzenia obiektu posiadającego poradę.

    Spring AOP: Realizacja wsytępuje w czasie wykonywania kodu (runtime).

Rodzaje porad w Springu AOP

Spring AOP dostarcza kilka przydatnych typów porad. Przyjrzyjmy się im nieco bliżej:

  • Przed (Before)

    Porada jest uruchamiana przed punktem sprzężenia (punktem złączenia). Może przerwać dalsze wykonywanie kodu tylko poprzez wyrzucenie wyjątku. W każdym innym przypadku proces dotrze do punktu złączenia.
  • Po powrocie (After returning)

    Porada jest wykonywana po tym, jak proces przejdzie przez punkt złączenia (moment wykonywania "śledzonej" metody) bez żadnych wyjątków.
  • Po rzuceniu (After throwing)

    Porada, którą ma zostać wykonana gdy uruchamiana metoda (co stanowi punkt złączenia) zostanie zakończona przez zgłoszenie wyjątku.
  • Po (After)

    Porada wykonywana zawsze, niezależnie od tego w jaki sposób kończy się punkt złączenia (w jaki sposób kończy się nasze obecnie śledzone wykonanie metody).
  • Dookoła (Around)

    Porada o największej mocy sprawczej, gdyż jest ona uruchamiana tuż przed punktem złączenia jakim jest wykonanie metody, a następnie umożliwia obsługe tego punktu złączenia (np. niewykonanie go w momencie zaistnienia określonego warunku). Na końcu swojego działania może jeszcze wykonać operacje po zakończeniu uruchomionej metody (jeśli wcześniej nie przerwała procesu, np. nie doprowadzając do uruchomienia metody).
Jak widać poradę można więc przedstawić jako sposób na śledzenie kolejnych momentów wykonywania procesu, którego częścią kluczową jest uruchomienie metody (punkt złączenia), po to by następnie wprowadzić tam odpowiednio skonstruowane rozwiązania programistyczne.
Nasza rekomendacja
To chyba jedyny rozdział tak mocno napakowany teorią. Niestety nie mogło go zabraknąć w naszym kursie. Zdajemy sobie sprawę, że terminologia AOP jest trudna - a według dokumentacji samego Springa - nieszczególnie intuicyjna. Niemniej ogólny zarys trzeba posiadać, a już na pewno ważne jest abyśmy zapamiętali szczególnie cztery pierwsze koncepcje takie jak: aspekt, punkt złączenia, porada, punkt przecięcia.
Używamy w StartAPPa


W każdym kursie używamy aspektów do logowania czasów wykonania metod, za pomocą klasy LogAspect.
Linki
https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy:
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .