Bevezetés a tavaszi AOP-ba

1. Bemutatkozás

Ebben az oktatóanyagban bemutatjuk az AOP-t (Aspect Oriented Programming) a Spring-szel, és elkezdjük megérteni, hogyan kezdhetjük el használni ezt a hatékony eszközt gyakorlati forgatókönyvekben.

Az AspectJ kommentárjainak kihasználása a Spring AOP használatával történő fejlesztés során is lehetséges, de ebben a cikkben a Spring AOP XML alapú alapvető konfigurációjára összpontosítunk.

2. Áttekintés

Az AOP egy olyan programozási paradigma, amelynek célja a modularitás növelése azáltal, hogy lehetővé teszi az átfogó kérdések elkülönítését. Ezt úgy teszi, hogy további viselkedést ad hozzá a meglévő kódhoz, a kód módosítása nélkül.

Ehelyett külön deklarálhatjuk ezt az új kódot és ezeket az új viselkedéseket.

A tavaszi AOP keretrendszer segít megvalósítani ezeket az átfogó aggályokat.

3. Maven-függőségek

Kezdjük azzal, hogy hozzáadjuk a Spring AOP könyvtárfüggőségét a pom.xml:

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

A függőség legfrissebb verziója itt ellenőrizhető.

4. AOP fogalmak és terminológia

Vizsgáljuk meg röviden az AOP sajátos fogalmait és terminológiáját:

4.1. Üzleti objektum

Az üzleti objektum egy normális osztály, amelynek normál üzleti logikája van. Nézzünk meg egy üzleti objektum egyszerű példáját, ahol csak két számot adunk hozzá:

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

Ne feledje, hogy ez az osztály normál üzleti logikájú osztály, tavaszi kommentárok nélkül.

4.2. Vonatkozás

Az egyik szempont egy aggodalom modulációja, amely több osztályra kiterjed. Az egységes fakitermelés lehet példa ilyen átfogó aggodalomra.

Lássuk, hogyan definiálunk egy egyszerű szempontot:

public class AdderAfterReturnAspect {private Logger logger = LoggerFactory.getLogger (this.getClass ()); public void afterReturn (Object returnValue) dobja a Throwable {logger.info ("value return {}" volt, returnValue); }} 

A fenti példában csak egy egyszerű Java osztályt definiáltunk, amelynek van egy neve afterReturn ehhez egy típusú argumentum szükséges Tárgy és csak beírja ezt az értéket. Vegye figyelembe, hogy még a mi is AdderAfterReturnAspect standard osztály, minden tavaszi kommentár nélkül.

A következő szakaszokban meglátjuk, hogyan kapcsolhatjuk ezt a szempontot üzleti objektumunkhoz.

4.3. Joinpoint

A Joinpoint egy pont a program végrehajtása során, például egy módszer végrehajtása vagy egy kivétel kezelése.

Tavaszi AOP-ban a JoinPoint mindig egy módszer végrehajtását jelenti.

4.4. Pointcut

A Pointcut egy predikátum, amely segít egyeztetni Tanács által alkalmazandó Vonatkozás egy adottnál JoinPoint.

A Tanács gyakran társul a Pointcut kifejezés, és bármelyiken fut Joinpoint egyezik a Pointcut.

4.5. Tanács

A tanács olyan cselekvés, amelyet egy adott szempont egy adott résznél meghozott Joinpoint. Különböző típusú tanácsok tartalmazzák „Körül”, „előtte” és "utána" tanács.

Tavasszal egy Tanács elfogó modellező, az elfogók láncolatát fenntartva a Joinpoint.

4.6. Üzleti objektumok és szempontok bekötése

Nézzük meg, hogyan tudjuk egy üzleti objektumot visszavezetés utáni tanácsokkal összekapcsolni egy szempontdal.

Az alábbiakban látható a konfigurációs kivonat, amelyet egy standard Spring konfigurációba helyeznénk a “” címke:

Amint látható, definiáltunk egy egyszerű babot, amelyet nevezünk simpleAdder amely egy üzleti objektum példányát képviseli. Ezenkívül létrehozunk egy Aspect nevű példányt AdderAfterReturnAspect.

Az XML itt természetesen nem az egyetlen lehetőségünk; amint azt korábban említettük, az AspectJ annotációk is teljes mértékben támogatottak.

4.7. Konfiguráció pillantásra

Címke aop: config az AOP-val kapcsolatos konfiguráció meghatározására szolgál. Belül konfig tag, megadjuk az osztályt, amely egy szempontot képvisel. Megadtuk neki a hivatkozást „DoAfterReturningAspect” aspektus bab, amit létrehoztunk.

Ezután definiálunk egy Pointcut-ot a pointcut címke. A fenti példában használt pointcut a végrehajtás (* org.baeldung.logger.SampleAdder +. * (..)) ami azt jelenti, hogy tanácsot kell alkalmazni bármely módszeren belül SampleAdder osztály, amely tetszőleges számú argumentumot elfogad és tetszőleges értéket ad vissza.

Ezután meghatározzuk, mely tanácsokat szeretnénk alkalmazni. A fenti példában a visszaküldés utáni tanácsokat fogjuk alkalmazni, amelyeket az Aspektusunk határoz meg AdderAfterReturnAspect nevű módszer végrehajtásával afterReturn attribútum módszerrel definiálva.

Ez az Aspect-en belüli tanács egy típusú paramétert vesz fel Tárgy. A paraméter lehetőséget ad arra, hogy cselekedjünk a cél módszer hívása előtt és / vagy után. Ebben az esetben csak regisztráljuk a módszer visszatérési értékét.

A tavaszi AOP több tanácsot is támogat annotáció alapú konfigurációval - ez és további példák itt és itt találhatók.

5. Következtetés

Ebben az oktatóanyagban illusztráltuk az AOP-ban használt fogalmakat és példát a Spring AOP moduljának használatára. Ha többet szeretne megtudni az AOP-ról, íme néhány forrás:

  • Bevezetés az AspectJ-be
  • Egyéni tavaszi AOP-kommentár megvalósítása
  • Bevezetés a Pointcut kifejezések tavasszal
  • A tavaszi AOP és az AspectJ összehasonlítása
  • Bevezetés a tanácsok típusaiba tavasszal

Ezeknek a példáknak a megvalósítása megtalálható a GitHub projektben - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.