Anotácie jarných bôbov

Tento článok je súčasťou série: • Jarné základné anotácie

• Jarné webové anotácie

• Jarné anotácie

• Anotácie jarného plánovania

• Jarné anotácie údajov

• Anotácie Spring Bean (aktuálny článok)

1. Prehľad

V tomto článku si povieme najviac spoločné anotácie jarných bôbov používa sa na definovanie rôznych druhov fazule.

Existuje niekoľko spôsobov, ako nakonfigurovať fazuľu v kontajneri Spring. Môžeme ich deklarovať pomocou konfigurácie XML. Fazuľu môžeme deklarovať pomocou @Bean anotácia v konfiguračnej triede.

Alebo môžeme triedu označiť jednou z anotácií z org.springframework.stereotyp balíček a zvyšok nechajte na skenovanie komponentov.

2. Skenovanie komponentov

Jar môže automaticky skenovať balík, či neobsahuje fazule, ak je povolené skenovanie komponentov.

@ComponentScan konfiguruje ktoré balíčky na skenovanie tried s konfiguráciou anotácií. Názvy základných balíkov môžeme určiť priamo pomocou jedného z basePackages alebo hodnotu argumenty (hodnotu je alias pre basePackages):

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

Tiež môžeme ukázať na triedy v základných balíkoch pomocou basePackageClasses argument:

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

Oba argumenty sú polia, aby sme každému mohli poskytnúť viac balíkov.

Ak nie je zadaný žiadny argument, skenovanie sa uskutoční z rovnakého balíka, kde je @ComponentScan je prítomná komentovaná trieda.

@ComponentScan využíva funkciu opakujúcich sa anotácií Java 8, čo znamená, že s ňou môžeme triedu označiť viackrát:

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

Prípadne môžeme použiť @ComponentScans určiť viac @ComponentScan konfigurácie:

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

Kedy pomocou konfigurácie XML, konfigurácia skenovania komponentov je rovnako ľahká:

3. @ Komponent

@ Komponent je anotácia na úrovni triedy. Počas skenovania komponentu Spring Framework automaticky detekuje triedy s poznámkami @ Komponent.

Napríklad:

@Trieda komponentov CarUtility {// ...}

Predvolene majú fazuľové inštancie tejto triedy rovnaký názov ako názov triedy s malými začiatočnými písmenami. Okrem toho môžeme pomocou voliteľného príslušenstva určiť iný názov hodnotu argument tejto anotácie.

Odkedy @Úložisko, @Služba, @ Konfiguráciaa @ Kontrolór všetky metaanotácie @ Komponentzdieľajú rovnaké správanie pri pomenovaní fazule. Spring ich tiež automaticky zdvihne počas procesu skenovania komponentov.

4. @Úložisko

Triedy DAO alebo Repository obvykle predstavujú vrstvu prístupu do databázy v aplikácii a mali by byť anotované @Úložisko:

@ Trieda úložiska VehicleRepository {// ...}

Jednou z výhod použitia tejto anotácie je to má povolený automatický preklad výnimiek trvalosti. Pri použití rámca perzistencie, ako je napríklad Hibernate, sú natívne výnimky vyvolané v rámci tried s poznámkami @Úložisko budú automaticky preložené do podtried jarných DataAccessExeption.

Povoliť preklad výnimiek, musíme vyhlásiť svoje vlastné PersistenceExceptionTranslationPostProcessor fazuľa:

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

Upozorňujeme, že vo väčšine prípadov urobí Spring vyššie uvedený krok automaticky.

Alebo prostredníctvom konfigurácie XML:

5. @Služba

The obchodná logika aplikácie sa zvyčajne nachádza vo vrstve služieb - použijeme teda @Služba anotácia označujúca, že trieda patrí do tejto vrstvy:

@Služba verejnej triedy VehicleService {// ...}

6. @ Kontrolór

@ Kontrolór je anotácia na úrovni triedy, ktorá informuje jarný rámec, že ​​táto trieda slúži ako radič na jar MVC:

@Controller verejná trieda VehicleController {// ...}

7. @ Konfigurácia

Konfigurácia triedy môžu obsahujú metódy definície fazule s poznámkou @Bean:

@ Trieda konfigurácie VehicleFactoryConfig {@Bean Engine engine () {return new Engine (); }}

8. Stereotypové anotácie a AOP

Keď používame jarné stereotypné anotácie, je ľahké vytvoriť bodový bod zameraný na všetky triedy, ktoré majú konkrétny stereotyp.

Predpokladajme napríklad, že chceme merať čas vykonávania metód z vrstvy DAO. Vytvoríme nasledujúci aspekt (pomocou anotácií AspectJ), ktorý bude využívať výhody @Úložisko stereotyp:

@Aspect @Component verejná trieda PerformanceAspect {@Pointcut ("within (@ org.springframework.stereotype.Repository *)") public void repositoryClassMethods () {}; @Around ("repositoryClassMethods ()") public Object measureMethodExecutionTime (ProceedingJoinPoint joinPoint) hodí Throwable {long start = System.nanoTime (); Objekt returnValue = joinPoint.proceed (); dlhý koniec = System.nanoTime (); Reťazec methodName = joinPoint.getSignature (). GetName (); System.out.println ("Vykonanie" + methodName + "trvalo" + TimeUnit.NANOSECONDS.toMillis (end - start) + "ms"); návrat returnValue; }}

V tomto príklade sme vytvorili bodový rez, ktorý zodpovedá všetkým metódam v triedach s poznámkami @Úložisko. Použili sme @Okolo radu, aby ste potom zamerali tento bod a určili čas vykonania hovorov zachytených metód.

Pomocou tohto prístupu môžeme do každej aplikačnej vrstvy pridať protokolovanie, správu výkonu, audit alebo iné správanie.

9. Záver

V tomto článku sme preskúmali jarné stereotypné anotácie a dozvedeli sme sa, aký typ sémantiky predstavujú.

Tiež sme sa naučili, ako pomocou skenovania komponentov povedať kontajneru, kde nájsť anotované triedy.

Nakoniec - videli sme, ako tieto anotácie viesť k čistému, vrstvenému dizajnu a oddelenie medzi záujmami žiadosti. Zmenšujú tiež konfiguráciu, pretože už nemusíme explicitne definovať fazuľa ručne.

Ako obvykle sú príklady k dispozícii na GitHub.

« Predchádzajúce jarné anotácie údajov