Tavaszi babjegyzetek

Ez a cikk egy sorozat része: • Tavaszi magjegyzetek

• Tavaszi internetes kommentárok

• Tavaszi indítójegyzetek

• Tavaszi ütemezési kommentárok

• Tavaszi adatjegyzetek

• Tavaszi bab kommentárok (aktuális cikk)

1. Áttekintés

Ebben a cikkben a legtöbbet tárgyaljuk gyakori tavaszi babjegyzetek különböző típusú bab meghatározására szolgál.

Többféle módon konfigurálható a bab egy tavaszi tartályban. XML konfigurációval deklarálhatjuk őket. A babot a @Bab annotáció egy konfigurációs osztályban.

Vagy megjelölhetjük az osztályt a org.springframework.stereotype csomagot, és a többit hagyja az alkatrészek vizsgálatára.

2. Komponens szkennelés

A Spring automatikusan átkutathatja a csomagot babkonfiguráció esetén, ha az alkatrész szkennelés engedélyezett.

@ComponentScan melyiket konfigurálja csomagok az osztályok felkutatásához annotáció konfigurációval. Az alapcsomag neveket közvetlenül megadhatjuk az egyik basePackages vagy érték érvek (érték egy alias a basePackages):

@Configuration @ComponentScan (basePackages = "com.baeldung.annotations") class VehicleFactoryConfig {}

Emellett az alapcsomagokban lévő osztályokra is mutathatunk a basePackageClasses érv:

@Configuration @ComponentScan (basePackageClasses = VehicleFactoryConfig.class) osztály VehicleFactoryConfig {}

Mindkét argumentum tömb, így mindegyikhez több csomagot tudunk biztosítani.

Ha nincs megadva argumentum, akkor a keresés ugyanabból a csomagból történik, ahová a @ComponentScan kommentált osztály van jelen.

@ComponentScan kihasználja a Java 8 ismétlődő kommentárok funkcióját, ami azt jelenti, hogy többször is megjelölhetünk vele egy osztályt:

@Configuration @ComponentScan (basePackages = "com.baeldung.annotations") @ComponentScan (basePackageClasses = VehicleFactoryConfig.class) osztály VehicleFactoryConfig {}

Alternatív megoldásként használhatjuk @ComponentScans többszörös megadásához @ComponentScan konfigurációk:

@Configuration @ComponentScans ({@ComponentScan (basePackages = "com.baeldung.annotations"), @ComponentScan (basePackageClasses = VehicleFactoryConfig.class)}) osztály VehicleFactoryConfig {}

Mikor XML konfigurációval, az összetevők szkennelésének konfigurálása ugyanolyan egyszerű:

3. @Összetevő

@Összetevő osztály szintű kommentár. Az alkatrész-vizsgálat során A Spring Framework automatikusan észleli a jelöléssel ellátott osztályokat @Összetevő.

Például:

@Component osztály CarUtility {// ...}

Alapértelmezés szerint ennek az osztálynak a babpéldányainak neve megegyezik az osztály nevével kisbetűs kezdőbetűvel. Ezen felül megadhatunk egy másik nevet az opcionális használatával érték érvelése ennek az annotációnak.

Mivel @Raktár, @Szolgáltatás, @ Konfiguráció, és @Vezérlő mind a meta-annotációk @Összetevő, ugyanaz a babnév-viselkedésük van. Ezenkívül Spring automatikusan felveszi őket az alkatrész-szkennelési folyamat során.

4. @Raktár

A DAO vagy a Repository osztályok általában az adatbázis hozzáférési réteget képviselik egy alkalmazásban, és azokat meg kell jegyezni @Raktár:

@Repository osztály VehicleRepository {// ...}

Ennek az annotációnak az egyik előnye az engedélyezte az automatikus perzisztencia kivétel fordítását. Ha olyan perzisztencia keretrendszert használ, mint a hibernálás, akkor az osztályokba dobott natív kivételek a következőkkel vannak kiegészítve @Raktár automatikusan lefordítják a Spring's alosztályaiba DataAccessExeption.

A kivétel fordításának engedélyezése, ki kell nyilvánítanunk a magunkét PersistenceExceptionTranslationPostProcessor bab:

@Bean public PersistenceExceptionTranslationPostProcessor kivételTranslation () {return new PersistenceExceptionTranslationPostProcessor (); }

Ne feledje, hogy a legtöbb esetben a Spring automatikusan elvégzi a fenti lépést.

Vagy XML konfigurációval:

5. @Szolgáltatás

A üzleti logika egy alkalmazás általában a szolgáltatási rétegen belül található - ezért a @Szolgáltatás kommentár, amely jelzi, hogy egy osztály az adott réteghez tartozik:

@Service public class VehicleService {// ...}

6. @Vezérlő

@Vezérlő egy osztály szintű kommentár, amely elmondja a Spring Framework-nek, hogy ez az osztály a vezérlő a tavaszi MVC-ben:

@Controller public class VehicleController {// ...}

7. @ Konfiguráció

Konfiguráció osztályok tudnak tartalmazzák a babdefiníciós módszereket jelöléssel @Bab:

@Configuration class VehicleFactoryConfig {@Bean Engine engine () {return new Engine (); }}

8. Sztereotípiás kommentárok és AOP

Amikor a Spring sztereotípiás kommentárokat használjuk, könnyen létrehozhatunk egy olyan pontvágányt, amely az összes olyan osztályt megcélozza, amelyek rendelkeznek egy adott sztereotípiával.

Tegyük fel például, hogy a módszerek végrehajtási idejét a DAO rétegből szeretnénk mérni. A következő szempontot hozzuk létre (az AspectJ kommentárokkal), kihasználva @Raktár sztereotípia:

@Aspect @Component public class PerformanceAspect {@Pointcut ("within (@ org.springframework.stereotype.Repository *)") public void repositoryClassMethods () {}; @Around ("repositoryClassMethods ()") public Object measureMethodExecutionTime (ProceedingJoinPoint joinPoint) dobja Throwable {long start = System.nanoTime (); Object returnValue = joinPoint.proceed (); hosszú vég = System.nanoTime (); String methodName = joinPoint.getSignature (). GetName (); System.out.println ("A" + methodName + "végrehajtása" + "TimeUnit.NANOSECONDS.toMillis (end - start) +" ms "); return returnValue; }}

Ebben a példában hoztunk létre egy pontvágást, amely megfelel az összes metódusnak az osztályokkal, amelyekhez annotáltunk @Raktár. Használtuk a @Körül tanács, hogy ezután célozza meg ezt a pontot, és határozza meg az elfogott metódushívások végrehajtási idejét.

Ennek a megközelítésnek a segítségével naplózást, teljesítménykezelést, auditot vagy más viselkedést adhatunk az egyes alkalmazásrétegekhez.

9. Következtetés

Ebben a cikkben megvizsgáltuk a Spring sztereotípia annotációit, és megtudtuk, hogy ezek milyen típusú szemantikát képviselnek.

Megtanultuk azt is, hogyan kell az összetevő-szkennelést megmondani a konténernek, hol találja a jegyzetelt osztályokat.

Végül - láttuk, hogy ezek az annotációk tiszta, réteges kialakításhoz vezet valamint az alkalmazás aggályainak elkülönítése. Kisebbé teszik a konfigurációt is, mivel már nem kell kifejezetten kézzel meghatároznunk a babot.

Szokás szerint a példák elérhetők a GitHub oldalon.

« Korábbi tavaszi adatjegyzetek