Bilješke proljetnog graha

Ovaj je članak dio niza: • Proljetne temeljne bilješke

• Proljetne web bilješke

• Bilješke proljetnog pokretanja

• Bilješke o proljetnom rasporedu

• Proljetne bilješke podataka

• Bilješke proljeća (trenutni članak)

1. Pregled

U ovom ćemo članku raspravljati o većini uobičajene bilješke proljeća graha koristi se za definiranje različitih vrsta graha.

Postoji nekoliko načina za konfiguriranje graha u Spring spremniku. Možemo ih prijaviti pomoću XML konfiguracije. Grah možemo prijaviti pomoću @Grah napomena u klasi konfiguracije.

Ili možemo označiti razred jednom od bilješki iz org.springframework.stereotip paket, a ostatak prepustite skeniranju komponenata.

2. Skeniranje komponenata

Spring može automatski skenirati paket za grah ako je omogućeno skeniranje komponenata.

@ComponentScan konfigurira koji paketi za skeniranje klasa s konfiguracijom napomena. Imena osnovnih paketa možemo odrediti izravno s jednim od basePackages ili vrijednost argumenti (vrijednost je alias za basePackages):

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

Također, možemo ukazati na klase u osnovnim paketima pomoću basePackageClasses argument:

@Configuration @ComponentScan (basePackageClasses = VehicleFactoryConfig.class) klasa VehicleFactoryConfig {}

Oba su argumenta polja tako da za svakog možemo pružiti više paketa.

Ako nije naveden nijedan argument, skeniranje se događa iz istog paketa u kojem je @ComponentScan prisutan je označeni razred.

@ComponentScan koristi značajku ponavljanja napomena Java 8, što znači da njome možemo više puta označiti klasu:

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

Alternativno, možemo koristiti @ComponentScans odrediti višestruko @ComponentScan konfiguracije:

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

Kada pomoću XML konfiguracije, konfiguriranje skeniranja komponenata jednako je jednostavno:

3. @Komponenta

@Komponenta je napomena na razini razreda. Tijekom skeniranja komponenata, Spring Framework automatski otkriva klase označene s @Komponenta.

Na primjer:

@Uporabna klasa klase {// ...}

Po defaultu, instance graha ove klase imaju isto ime kao i naziv klase s malim početnim slovom. Povrh toga, pomoću neobaveznog možemo odrediti drugo ime vrijednost argument ove napomene.

Od @ Repozitorij, @Servis, @Konfiguracija, i @Controller su sve meta-bilješke od @Komponenta, dijele isto ponašanje imenovanja graha. Također, Spring ih automatski preuzima tijekom postupka skeniranja komponenata.

4. @ Repozitorij

Klase DAO ili Repozitorija obično predstavljaju sloj pristupa bazi podataka u aplikaciji i trebaju biti označeni @ Repozitorij:

@Repository class VehicleRepository {// ...}

Jedna od prednosti korištenja ove bilješke je ta omogućen je automatski prijevod iznimke upornosti. Kada se koristi okvir trajnosti kao što je Hibernate, izvorni izuzeci bačeni unutar klasa označenih s @ Repozitorij automatski će se prevesti u podrazrede proljeća DataAccessExeption.

Da biste omogućili prijevod iznimki, trebamo se izjasniti svojim PersistenceExceptionTranslationPostProcessor grah:

@Bean public PersistenceExceptionTranslationPostProcessor exceptionTranslation () {return new PersistenceExceptionTranslationPostProcessor (); }

Imajte na umu da u većini slučajeva Spring provodi gornji korak automatski.

Ili putem XML konfiguracije:

5. @Servis

The poslovna logika aplikacije obično se nalazi u sloju usluge - pa ćemo koristiti @Servis napomena koja označava da klasa pripada tom sloju:

@Service javna klasa VehicleService {// ...}

6. @Controller

@Controller je napomena na razini klase koja govori Spring Frameworku da ova klasa služi kao kontroler u proljetnom MVC-u:

@Controller VehicleController javne klase {// ...}

7. @Konfiguracija

Konfiguracija klase mogu sadrže metode definicije graha označen sa @Grah:

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

8. Stereotipne bilješke i AOP

Kada koristimo proljetne oznake stereotipa, lako je stvoriti točku koja cilja sve klase koje imaju određeni stereotip.

Na primjer, pretpostavimo da želimo mjeriti vrijeme izvršavanja metoda iz DAO sloja. Stvorit ćemo sljedeći aspekt (koristeći napomene AspectJ) koristeći prednosti @ Repozitorij stereotip:

@Aspect @Component javna klasa PerformanceAspect {@Pointcut ("within (@ org.springframework.stereotype.Repository *)") public void repositoryClassMethods () {}; @Around ("repositoryClassMethods ()") public Object measureMethodExecutionTime (ProceedingJoinPoint joinPoint) baca mogućnost bacanja {long start = System.nanoTime (); Objekt returnValue = joinPoint.proceed (); dugi kraj = System.nanoTime (); Metoda niza = joinPoint.getSignature (). GetName (); System.out.println ("Izvršenje" + methodName + "uzelo je" + TimeUnit.NANOSECONDS.toMillis (kraj - početak) + "ms"); return returnValue; }}

U ovom smo primjeru stvorili pointcut koji odgovara svim metodama u razredima označenim @ Repozitorij. Koristili smo @Oko savjet da zatim ciljate taj pointcut i odredite vrijeme izvođenja presretnutih poziva metoda.

Korištenjem ovog pristupa možemo dodati bilježenje, upravljanje izvedbom, reviziju ili druga ponašanja u svaki sloj aplikacije.

9. Zaključak

U ovom smo članku ispitali proljetne oznake stereotipa i naučili koju vrstu semantike one predstavljaju.

Također smo naučili kako pomoću skeniranja komponenata reći spremniku gdje pronaći označene klase.

Napokon - vidjeli smo kako se te napomene dovesti do čistog, slojevitog dizajna i razdvajanje zabrinutosti aplikacije. Oni također čine konfiguraciju manjom, jer više ne trebamo eksplicitno definirati grah ručno.

Kao i obično, primjeri su dostupni na GitHubu.

« Prethodne proljetne bilješke podataka