Kapitola 4. Rámec Spring - AOP

Obsah

Pokyny (advices)
Definice cílů (pointcuts)
Aspekty (advisors)
AOP proxy
Deklarativní transakční management

Aspektově orientované programování (Aspect-oriented programming, AOP) se v poslední době stalo velmi populární technikou napomáhající zpřehlednění vývoje složitých systémů.

Nemáme prostor na detailní rozbor této programovací techniky, takže se spokojíme s výstižnou charakteristikou Tomáše Pitnera v [4]: „AOP v zásadě směřuje k tomu, jak elegantně dosáhnout vyčlenění opakovaných „nezáživných“, „režijních“ částí kódu, řešících obvykle nějaké (mimofunkční, napříč jdoucí) záměry (cross-cutting concerns, např. autentizaci/autorizaci klienta při vstupu do určité metody, protokolování volání metod, přístup k perzistentnímu úložišti dat …) do tzv. pokynů (advices). Tyto jsou vyčleněny do speciálních tříd a deklarativním způsobem je řečeno, kam všude se příslušný pokyn má aplikovat (ta místa se označují jako point-cuts). Běhové prostředí příslušného nástroje pro AOP pak zajistí aplikaci příslušného pokynu a vzniká tak tzv. aspekt (aspect).

AOP funkcionalita tvoří klíčovou složku rámce Spring™, který je často označován jako IoC a AOP kontejner. Možnosti AOP jsou zde opravdu poměrně široké a základní principy si na příkladech předvedeme i my.

V rámci Spring™ je AOP využíváno jako prostředek pro:

  1. poskytnutí deklarativních služeb, zejména tedy deklarativního transakčního managementu,

  2. tvorbu uživatelských aspektů.

Jednotlivé stavební prvky AOP modulu si teď stručně představíme.

Pokyny (advices)

Rámec Spring™ podporuje většinu v AOP komunitě používaných typů pokynů. Těmi základními jsou pokyny-interceptory (Interception Around Advice), které jsou aplikovány před i po vyvolání metody, dále předsazené pokyny (Before Advice), které se volají pouze před vyvoláním metody, pokyny výjimek (Throws Advice), které jsou volány pouze pokud cílová metoda vyhodí výjimku konkrétního typu, a konečně pokyny po návratu (After Returning Advice), které se provedou pouze po úspěšném návratu řízení z cílové metody.

Ukážeme si příklad nejpoužívanějšího typu pokynů, tedy pokynu-interceptoru. Příklad je převzat z [5] a mírně upraven.

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
    
public class MessageDecorator implements MethodInterceptor {

  public Object invoke(MethodInvocation invocation) throws Throwable {
    System.out.print("Startuji dekoraci ...");
    Object retVal = invocation.proceed();
    System.out.println("Končím dekoraci ...");
    return retVal;
  }
}

Vidíme, že pokyn implementuje rozhraní MethodInterceptor a jeho metodu invoke, v jejímž průběhu zavolá cílovou metodu a její návratovou hodnotu nakonec také vrátí. Jsou použita standardní rozhraní AOP Alliance API, takže knihovnu s tímto API je nutno umístit do classpath každé aplikace využívající AOP funkcionality rámce Spring™.

Komentáře

Téma neobsahuje žádné komentáře.

Vložit komentář

Můžete používat značkovací jazyk Texy!


Jméno:
E-mail:
Url:
Komentář:
1 + 2 =
 
MoroSystems, s.r.o.