Introduksjon til Spring AOP

1. Introduksjon

I denne veiledningen introduserer vi AOP (Aspect Oriented Programming) med Spring og begynner å forstå hvordan vi kan begynne å bruke dette kraftige verktøyet i praktiske scenarier.

Det er også mulig å utnytte AspectJs merknader når vi utvikler bruk av Spring AOP, men i denne artikkelen fokuserer vi på kjernen av AOP XML-basert konfigurasjon.

2. Oversikt

AOP er et programmeringsparadigme som tar sikte på å øke modulariteten ved å tillate atskillelse av tverrgående bekymringer. Det gjør det ved å legge til ekstra oppførsel til eksisterende kode uten å endre selve koden.

I stedet kan vi erklære denne nye koden og disse nye atferdene separat.

Vårens AOP-rammeverk hjelper oss med å implementere disse tverrgående bekymringene.

3. Maven-avhengigheter

La oss starte med å legge til Spring's AOP-bibliotekavhengighet i pom.xml:

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

Den siste versjonen av avhengigheten kan sjekkes her.

4. AOP-begreper og terminologi

La oss kort gå gjennom konseptene og terminologien som er spesifikke for AOP:

4.1. Forretningsobjekt

Et forretningsobjekt er en normal klasse som har en normal forretningslogikk. La oss se på enkelt eksempel på et forretningsobjekt der vi bare legger til to tall:

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

Merk at denne klassen er en normal klasse med forretningslogikk og uten vårrelaterte merknader.

4.2. Aspekt

Et aspekt er en modulering av en bekymring som skjærer over flere klasser. Enhetlig logging kan være et eksempel på en slik tverrgående bekymring.

La oss se hvordan vi definerer et enkelt aspekt:

offentlig klasse AdderAfterReturnAspect {private Logger logger = LoggerFactory.getLogger (this.getClass ()); offentlig tomrom etterReturn (Object returnValue) kaster Throwable {logger.info ("value return was {}", returnValue); }} 

I eksemplet ovenfor har vi nettopp definert en enkel Java-klasse som har en metode som kalles etterReturn det tar ett argument av typen Gjenstand og den logger bare på den verdien. Merk at selv vår AdderAfterReturnAspect er en standard klasse, uten vårkommentarer.

I de neste avsnittene vil vi se hvordan vi kan koble dette aspektet til forretningsobjektet vårt.

4.3. Joinpoint

EN Joinpoint er et punkt under gjennomføringen av et program, for eksempel utføring av en metode eller håndtering av et unntak.

På våren AOP, a Bli med iPoint representerer alltid en metodeutførelse.

4.4. Pointcut

En punktkutt er et predikat som hjelper til med å matche et Råd skal brukes av en Aspekt på en bestemt Bli med iPoint.

Rådene er ofte assosiert med en Pointcut uttrykk og løper når som helst Joinpoint matchet av Pointcut.

4.5. Råd

Et råd er en handling som tas av et aspekt ved et bestemt Joinpoint. Ulike typer råd inkluderer “Rundt”, “før” og "etter" råd.

På våren an Råd er modellert som en interceptor, og opprettholder en kjede av interceptors rundt Joinpoint.

4.6. Kabling av forretningsobjekt og aspekt

La oss se på hvordan vi kan koble et forretningsobjekt til et aspekt med et råd etter retur.

Nedenfor er konfigurasjonsutdraget som vi vil plassere i en standard vårkonfigurasjon i “” stikkord:

Som vi kan se, har vi definert en enkel bønne som heter simpleAdder som representerer en forekomst av et forretningsobjekt. I tillegg lager vi en forekomst av et Aspect som heter AdderAfterReturnAspect.

XML er selvfølgelig ikke vårt eneste alternativ her; Som nevnt tidligere støttes også AspectJ-merknader.

4.7. Konfigurasjon i blikk

stikkord aop: config brukes til å definere AOP-relatert konfigurasjon. Innen config tag, definerer vi klassen som representerer et aspekt. Vi har gitt den en referanse til “DoAfterReturningAspect” aspektbønne som vi opprettet.

Deretter definerer vi en Pointcut ved hjelp av snarvei stikkord. Pointcut brukt i eksemplet ovenfor er utførelse (* org.baeldung.logger.SampleAdder +. * (..)) som betyr å bruke et råd om hvilken som helst metode innen SampleAdder klasse som godtar et hvilket som helst antall argumenter og returnerer en hvilken som helst verditype.

Deretter definerer vi hvilke råd vi vil bruke. I eksemplet ovenfor skal vi bruke råd etter retur som er definert i vårt aspekt AdderAfterReturnAspect ved å utføre metoden navngitt etterReturn definert ved hjelp av attributtmetode.

Dette rådet innen Aspect tar en parameter av typen Gjenstand. Parameteren gir oss en mulighet til å ta en handling før og / eller etter målmetodeanropet. I dette tilfellet logger vi bare metodens returverdi.

Spring AOP støtter flere råd ved hjelp av kommentarbasert konfigurasjon - dette og flere eksempler finner du her og her.

5. Konklusjon

I denne opplæringen illustrerte vi konsepter som ble brukt i AOP og eksempel på bruk av AOP-modulen fra våren. Hvis du er interessert i å oppdage mer om AOP, er det noen ressurser:

  • En introduksjon til AspectJ
  • Implementere en tilpasset vår AOP-kommentar
  • En introduksjon til Pointcut Expressions om våren
  • Sammenligning av Spring AOP og AspectJ
  • En introduksjon til rådgivningstyper om våren

Implementeringen av disse eksemplene finnes i GitHub-prosjektet - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


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