Úvod do jarného AOP

1. Úvod

V tomto tutoriáli si predstavíme program AOP (Aspect Oriented Programming) s programom Spring a začneme chápať, ako môžeme tento výkonný nástroj začať používať v praktických scenároch.

Pri vývoji pomocou Spring AOP je tiež možné využiť poznámky AspectJ, ale v tomto článku sa zameriavame na základnú konfiguráciu založenú na Spring AOP XML.

2. Prehľad

AOP je paradigma programovania, ktorej cieľom je zvýšiť modularitu tým, že umožní oddelenie prierezových problémov. Robí to pridaním dodatočného správania k existujúcemu kódu bez úpravy samotného kódu.

Namiesto toho môžeme tento nový kód a tieto nové správanie deklarovať osobitne.

Jarný rámec AOP nám pomáha implementovať tieto prierezové problémy.

3. Závislosti Maven

Začnime pridaním jarnej závislosti knižnice AOP do súboru pom.xml:

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE org.springframework.boot spring-boot-starter-aop 

Najnovšiu verziu závislosti si môžete skontrolovať tu.

4. Koncepty a terminológia AOP

Poďme si v krátkosti na pojmy a terminológiu špecifickú pre AOP:

4.1. Obchodný objekt

Obchodný objekt je normálna trieda, ktorá má normálnu obchodnú logiku. Pozrime sa na jednoduchý príklad obchodného objektu, kde pridáme iba dve čísla:

verejná trieda SampleAdder {public int add (int a, int b) {return a + b; }} 

Upozorňujeme, že táto trieda je normálnou triedou s obchodnou logikou a bez akýchkoľvek anotácií týkajúcich sa jari.

4.2. Aspekt

Aspektom je modularizácia koncernu, ktorý sa týka viacerých tried. Jednotná ťažba dreva môže byť príkladom takéhoto prierezového záujmu.

Pozrime sa, ako definujeme jednoduchý Aspekt:

public class AdderAfterReturnAspect {private Logger logger = LoggerFactory.getLogger (this.getClass ()); public void afterReturn (Object returnValue) hodí Throwable {logger.info ("návrat hodnoty bol {}", returnValue); }} 

Vo vyššie uvedenom príklade sme práve definovali jednoduchú triedu Java, ktorá má metódu nazvanú afterReturn ktorý vyžaduje jeden argument typu Objekt a iba sa prihlási do tejto hodnoty. Všimnite si, že aj náš AdderAfterReturnAspect je štandardná trieda bez akýchkoľvek jarných anotácií.

V ďalších častiach uvidíme, ako môžeme prepojiť tento aspekt s našim obchodným objektom.

4.3. Joinpoint

A Joinpoint je bod počas vykonávania programu, napríklad vykonanie metódy alebo spracovanie výnimky.

Na jar AOP, a JoinPoint vždy predstavuje vykonanie metódy.

4.4. Pointcut

Bodový bod je predikát, ktorý pomáha porovnávať s Rada bude aplikovaný Aspekt pri konkrétnom JoinPoint.

Rada je často spojená s a Pointcut výraz a beží kedykoľvek Joinpoint uzavreté bodovým bodom.

4.5. Rada

Rada je činnosť vykonaná konkrétnym aspektom Joinpoint. Medzi rôzne typy rád patrí „Okolo“, „predtým“ a „Po“ radu.

Na jar, an Rada je modelovaný ako zachytávač, ktorý udržuje reťaz zachytávačov okolo Joinpoint.

4.6. Zapojenie obchodného objektu a aspektu

Poďme sa pozrieť na to, ako môžeme prepojiť obchodný objekt s Aspektom s odporúčaním po návrate.

Ďalej je uvedený výňatok z konfigurácie, ktorý by sme umiestnili do štandardnej konfigurácie Spring v “” značka:

Ako je vidieť, definovali sme jednoduchú fazuľu s názvom simpleAdder ktorá predstavuje inštanciu obchodného objektu. Okrem toho vytvárame inštanciu Aspektu s názvom AdderAfterReturnAspect.

XML tu samozrejme nie je naša jediná možnosť; ako už bolo spomenuté, anotácie AspectJ sú tiež plne podporované.

4.7. Stručná konfigurácia

Označiť aop: konfigur sa používa na definovanie konfigurácie súvisiacej s AOP. V rámci konfigur tag, definujeme triedu, ktorá predstavuje aspekt. Dali sme tomu odkaz na „DoAfterReturningAspect“ fazuľa aspektov, ktorú sme vytvorili.

Ďalej definujeme bodový rez pomocou pointcut značka. Bodový bod použitý v príklade vyššie je prevedenie (* org.baeldung.logger.SampleAdder +. * (..)) , čo znamená aplikovať poradenstvo o akejkoľvek metóde v rámci SampleAdder trieda, ktorá akceptuje ľubovoľný počet argumentov a vráti akýkoľvek typ hodnoty.

Ďalej definujeme, ktorú radu chceme použiť. V uvedenom príklade použijeme radu po návrate, ktorá je definovaná v našom aspekte AdderAfterReturnAspect vykonaním pomenovanej metódy afterReturn definované pomocou atribútovej metódy.

Táto rada v rámci Aspektu má jeden parameter typu Objekt. Parameter nám dáva príležitosť konať pred alebo po volaní cieľovej metódy. V takom prípade iba zaznamenáme návratovú hodnotu metódy.

Jarný AOP podporuje viac rád pomocou konfigurácie založenej na anotáciách - tento a ďalšie príklady nájdete tu a tu.

5. Záver

V tomto tutoriáli sme ilustrovali koncepty použité v AOP a príklad použitia AOP modulu Spring. Ak máte záujem dozvedieť sa viac o AOP, tu je niekoľko zdrojov:

  • Úvod do AspectJ
  • Implementácia vlastnej jarnej anotácie AOP
  • Úvod do výrazov Pointcut na jar
  • Porovnávanie jarných AOP a AspectJ
  • Úvod do typov rád na jar

Implementáciu týchto príkladov možno nájsť v projekte GitHub - jedná sa o projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


$config[zx-auto] not found$config[zx-overlay] not found