Uvod u proljetni AOP

1. Uvod

U ovom uputstvu predstavit ćemo AOP (Aspect Oriented Programming) s Springom i započeti razumijevanje kako možemo početi koristiti ovaj moćni alat u praktičnim scenarijima.

Također je moguće iskoristiti napomene AspectJ-a prilikom razvijanja pomoću Spring AOP-a, ali u ovom smo članku usredotočeni na temeljnu konfiguraciju utemeljenu na Spring AOP XML-u.

2. Pregled

AOP je programska paradigma kojoj je cilj povećati modularnost dopuštajući odvajanje međusobnih problema. To čini dodavanjem dodatnog ponašanja postojećem kodu bez promjene samog koda.

Umjesto toga, ovaj novi kôd i ta nova ponašanja možemo deklarirati odvojeno.

Proljetni AOP okvir pomaže nam u provođenju ovih međusektorskih problema.

3. Ovisnosti Mavena

Počnimo s dodavanjem ovisnosti Spring AOP knjižnice u pom.xml:

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

Najnoviju verziju ovisnosti možete provjeriti ovdje.

4. AOP koncepti i terminologija

Kratko pređimo na koncepte i terminologiju specifične za AOP:

4.1. Poslovni objekt

Poslovni objekt je normalna klasa koja ima normalnu poslovnu logiku. Pogledajmo jednostavni primjer poslovnog objekta gdje dodamo samo dva broja:

javna klasa SampleAdder {public int add (int a, int b) {return a + b; }} 

Imajte na umu da je ova klasa normalna klasa s poslovnom logikom i bez bilješki povezanih s proljećem.

4.2. Aspekt

Aspekt je modularizacija zabrinutosti koja obuhvaća više klasa. Objedinjeno bilježenje može biti primjer takve presječne brige.

Pogledajmo kako definiramo jednostavan aspekt:

javna klasa AdderAfterReturnAspect {private Logger logger = LoggerFactory.getLogger (this.getClass ()); javna void afterReturn (Object returnValue) baca Throwable {logger.info ("return return was {}", returnValue); }} 

U gornjem primjeru upravo smo definirali jednostavnu Java klasu koja se zove metoda poslijePovratak koji uzima jedan argument tipa Objekt i samo se prijavljuje u toj vrijednosti. Imajte na umu da čak i naša AdderAfterReturnAspect je standardni razred bez ikakvih proljetnih napomena.

U sljedećim odjeljcima vidjet ćemo kako taj aspekt možemo povezati s našim poslovnim objektom.

4.3. Točka spajanja

A Točka spajanja je točka tijekom izvođenja programa, poput izvođenja metode ili obrade iznimke.

U proljeće AOP, a JoinPoint uvijek predstavlja izvršenje metode.

4.4. Pointcut

Pointcut je predikat koji pomaže podudaranju s Savjet primijeniti an Aspekt kod određenog JoinPoint.

Savjeti se često povezuju s a Pointcut izraz i trči na bilo kojem Točka spajanja u skladu s Pointcutom.

4.5. Savjet

Savjet je radnja koju poduzima određeni aspekt Točka spajanja. Uključuju se različite vrste savjeta "Oko", "prije" i "nakon" savjet.

U proljeće je Savjet modeliran je kao presretač, održavajući lanac presretača oko Točka spajanja.

4.6. Ožičenje poslovnog objekta i aspekta

Pogledajmo kako poslovni objekt možemo povezati s aspektom savjetima nakon povratka.

Ispod je izvod iz konfiguracije koji bismo smjestili u standardni Spring config u “” označiti:

Kao što se može vidjeti, definirali smo jednostavan grah koji se zove simpleAdder koji predstavlja instancu poslovnog objekta. Osim toga, kreiramo instancu Aspekta pod nazivom AdderAfterReturnAspect.

XML, naravno, nije jedina naša opcija ovdje; kao što je već spomenuto, u potpunosti su podržane i bilješke AspectJ.

4.7. Konfiguracija na prvi pogled

Označiti aop: config koristi se za definiranje konfiguracije povezane s AOP-om. Unutar konfiguracija tag, definiramo klasu koja predstavlja aspekt. Dali smo referencu na "DoAfterReturningAspect" aspekt graha koji smo stvorili.

Dalje, definiramo Pointcut pomoću pointcut označiti. Pointcut korišten u gornjem primjeru je izvršenje (* org.baeldung.logger.SampleAdder +. * (..)) što znači primijeniti savjet o bilo kojoj metodi unutar SampleAdder klasa koja prihvaća bilo koji broj argumenata i vraća bilo koju vrstu vrijednosti.

Zatim definiramo koji savjet želimo primijeniti. U gornjem primjeru primijenit ćemo savjet nakon povratka koji je definiran u našem aspektu AdderAfterReturnAspect izvršavanjem imenovane metode poslijePovratak definirano metodom atributa.

Ovaj savjet u okviru aspekta uzima jedan parametar tipa Objekt. Parametar nam daje priliku da poduzmemo radnju prije i / ili nakon poziva ciljne metode. U ovom slučaju, samo bilježimo povratnu vrijednost metode.

Spring AOP podržava više savjeta pomoću konfiguracije temeljene na bilješkama - ovaj i više primjera možete pronaći ovdje i ovdje.

5. Zaključak

U ovom uputstvu ilustrirali smo koncepte koji se koriste u AOP-u i primjer korištenja AOP modula Spring. Ako ste zainteresirani za otkrivanje više o AOP-u, evo nekoliko izvora:

  • Uvod u AspectJ
  • Implementacija prilagođene proljetne AOP bilješke
  • Uvod u Pointcut Expressions u proljeće
  • Uspoređujući Spring AOP i AspectJ
  • Uvod u vrste savjeta u proljeće

Implementacija ovih primjera može se naći u projektu GitHub - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.