Anotácie jarného jadra

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

• Jarné anotácie

• Anotácie jarného plánovania

• Jarné anotácie údajov

• Anotácie jarných bôbov

1. Prehľad

Schopnosti Spring DI enginu môžeme využiť pomocou anotácií v org.springframework.beans.factory.anotácia a org.springframework.context.annotation balíkov.

Často ich nazývame „Jarné základné anotácie“ a v tomto návode ich preskúmame.

2. Anotácie týkajúce sa DI

2.1. @Autowired

Môžeme použiť @Autowired do označte závislosť, ktorú Spring vyrieši a vstrekne. Túto anotáciu môžeme použiť s injektorom konštruktora, setra alebo poľa.

Vstrekovanie konštruktéra:

trieda Auto {motor motora; @Autowired Car (Engine engine) {this.engine = motor; }}

Nastavovacie vstrekovanie:

trieda Auto {motor motora; @Autowired void setEngine (motor motora) {this.engine = motor; }}

Polné vstrekovanie:

motor triedy {@Autowired Engine; }

@Autowiredboolovský argument volal požadovaný s predvolenou hodnotou pravda. Naladí Springove správanie, keď nenájde vhodnú fazuľu na drôt. Kedy pravda, vyvolá sa výnimka, inak sa nič drôtovo nezapojí.

Upozorňujeme, že ak použijeme vkladanie konštruktora, všetky argumenty konštruktora sú povinné.

Počnúc verziou 4.3 nemusíme konštruktérov anotovať @Autowired výslovne, pokiaľ nevyhlásime aspoň dvoch konštruktorov.

Viac podrobností nájdete v našich článkoch o @Autowired a vstrekovanie konštruktora.

2.2. @Bean

@Bean označuje továrenskú metódu, ktorá vytvára inštanciu jarnej fazule:

@Bean Engine engine () {return new Engine (); }

Jar nazýva tieto metódy keď sa vyžaduje nová inštancia návratového typu.

Výsledná fazuľa má rovnaký názov ako továrenská metóda. Ak to chceme pomenovať inak, môžeme tak urobiť pomocou názov alebo hodnotu argumenty tejto anotácie (argument hodnotu je alias pre argument názov):

@Bean ("engine") Engine getEngine () {return new Engine (); }

Upozorňujeme, že všetky metódy komentované @Bean musí byť v @ Konfigurácia triedy.

2.3. @Qualifier

Používame @Qualifier spolu s @Autowired do uveďte ID alebo názov fazule chceme použiť v nejednoznačných situáciách.

Napríklad nasledujúce dve fazule implementujú rovnaké rozhranie:

trieda Bike implementuje Vehicle {} class Car implementuje Vehicle {}

Ak si Spring musí podať injekciu a Vozidlo fazuľa, končí sa niekoľkými definíciami zhody. V takýchto prípadoch môžeme uviesť názov fazule výslovne pomocou @Qualifier anotácia.

Pomocou vstrekovania konštruktora:

@Autowired Biker (@Qualifier ("bike") Vehicle vehicle) {this.vehicle = vehicle; }

Pomocou vstrekovania nastavovača:

@Autowired void setVehicle (@Qualifier ("bike") Vehicle vehicle) {this.vehicle = vehicle; }

Prípadne:

@Autowired @Qualifier ("bike") void setVehicle (Vehicle vehicle) {this.vehicle = vehicle; }

Pomocou vstrekovania poľa:

@Autowired @Qualifier („bike“) Vozidlo vozidla;

Podrobnejší popis nájdete v tomto článku.

2.4. @Požadovaný

@Požadovaný o metódach nastavovača na označenie závislostí, ktoré chceme vyplniť prostredníctvom XML:

@Required void setColor (farba reťazca) {this.color = color; }

Inak, BeanInitializationException bude vyhodený.

2.5. @Hodnota

Môžeme použiť @Hodnota na vstrekovanie majetkových hodnôt do fazule. Je kompatibilný s konštruktorom, nastavovačom a vstrekovaním poľa.

Vstrekovanie konštruktéra:

Engine (@Value ("8") int cylinderCount) {this.cylinderCount = cylinderCount; }

Nastavovacie vstrekovanie:

@Autowired void setCylinderCount (@Value ("8") int cylinderCount) {this.cylinderCount = cylinderCount; }

Prípadne:

@Value ("8") void setCylinderCount (int cylindCount) {this.cylinderCount = cylinderCount; }

Polné vstrekovanie:

@Value ("8") int cylindCount;

Vkladanie statických hodnôt nie je samozrejme užitočné. Preto môžeme použiť zástupné reťazce v @Hodnota na drôtové hodnoty definované v externých zdrojochnapríklad v .vlastnosti alebo .yaml súbory.

Predpokladajme nasledovné .vlastnosti spis:

motor.palivoTyp = benzín

Môžeme vložiť hodnotu typ motora.palivo s týmto:

@Value ("$ {engine.fuelType}") Reťazec fuelType;

Môžeme použiť @Hodnota aj so SpEL. Pokročilejšie príklady nájdete v našom článku o @Hodnota.

2.6. @Záleží na

Túto anotáciu môžeme použiť na vytvorenie jari inicializujte ďalšie fazule pred anotovanou. Toto správanie je zvyčajne automatické na základe explicitných závislostí medzi fazuľami.

Potrebujeme iba túto anotáciu keď sú závislosti implicitné, napríklad načítanie ovládača JDBC alebo inicializácia statickej premennej.

Môžeme použiť @Záleží na na závislej triede s uvedením názvov závislých fazúľ. Anotácia hodnotu argument potrebuje pole obsahujúce názvy beanov závislostí:

Automobil triedy @DependsOn („motor“) implementuje vozidlo {}

Prípadne, ak definujeme fazuľu pomocou @Bean anotácia, továrenská metóda by mala byť anotovaná pomocou @Záleží na:

@Bean @DependsOn ("fuel") Engine engine () {return new Engine (); }

2.7. @Lazy

Používame @Lazy keď chceme lenivo inicializovať svoju fazuľu. V predvolenom nastavení Spring vytvára všetky fazule singleton dychtivo pri štarte / bootstrapovaní kontextu aplikácie.

Existujú však prípady, keď fazuľu musíme vytvoriť, keď o to požiadame, nie pri spustení aplikácie.

Táto anotácia sa správa odlišne podľa toho, kam ju presne umiestnime. Môžeme si to obliecť:

  • a @Bean anotovaná metóda výroby fazule, na oddialenie volania metódy (teda vytvorenie fazule)
  • a @Konfigurácia triedy a všetky obsiahnuté @Bean ovplyvnené
  • a @ Komponent trieda, ktorá nie je a @ Konfigurácia triedy, bude táto fazuľa lenivo inicializovaná
  • an @Autowired konštruktor, nastavovač alebo pole, aby si lenivo načítali závislosť (cez proxy)

Táto anotácia má pomenovaný argument hodnotu s predvolenou hodnotou pravda. Je užitočné potlačiť predvolené správanie.

Napríklad označenie fazule, ktorá sa má dychtivo načítať, keď je globálne nastavenie lenivé, alebo konfigurácia konkrétneho @Bean metódy nedočkavého načítania v a @ Konfigurácia trieda označená @Lazy:

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

Ďalšie informácie nájdete v tomto článku.

2.8. @Vyhľadať

Metóda s poznámkou @Vyhľadať povie Springovi, aby vrátil inštanciu návratového typu metódy, keď ju vyvoláme.

Podrobné informácie o anotácii nájdete v tomto článku.

2.9. @Primárny

Niekedy musíme definovať viac fazúľ rovnakého typu. V týchto prípadoch bude injekcia neúspešná, pretože Spring nemá potuchy, ktorú fazuľu potrebujeme.

Už sme videli možnosť, ako sa vysporiadať s týmto scenárom: označiť všetky elektrické vodiče pomocou @Qualifier a zadajte názov požadovanej fazule.

Väčšinou však potrebujeme konkrétnu fazuľu a zriedka aj ostatné. Môžeme použiť @Primárny na zjednodušenie tohto prípadu: ak najčastejšie používanou fazuľou označíme @Primárny bude vybraný na nekvalifikovaných injekčných bodoch:

@Component @Primary class Car implementuje Vehicle {} @Component class Bike implementuje Vehicle {} @Component class Driver {@Autowired Vehicle vehicle; } @Component class Biker {@Autowired @Qualifier („bike“) Vozidlo vozidla; }

V predchádzajúcom príklade Auto je primárne vozidlo. Preto v Vodič triedy, Spring vstrekuje a Auto fazuľa. Samozrejme, v Motorkár fazuľa, hodnota poľa vozidlo bude a Bicykel objekt, pretože je to kvalifikované.

2.10. @Rozsah

Používame @Rozsah vymedziť rozsah a @ Komponent trieda alebo a @Bean definícia. Môže to byť buď singleton, prototyp, požiadavka, relácia, globalSession alebo nejaký vlastný rozsah.

Napríklad:

Motor triedy @Component @Scope („prototyp“) {}

3. Anotácie konfigurácie kontextu

Môžeme nakonfigurovať kontext aplikácie s anotáciami opísanými v tejto časti.

3.1. @Profil

Ak chceme, aby jar použite a @ Komponent trieda alebo a @Bean metóda, iba ak je aktívny konkrétny profil, môžeme to označiť @Profil. Názov profilu môžeme nakonfigurovať pomocou hodnotu argument anotácie:

Bike triedy @Component @Profile ("sportDay") implementuje vozidlo {}

Viac o profiloch sa dočítate v tomto článku.

3.2. @Import

Môžeme použiť konkrétne @ Konfigurácia triedy bez skenovania komponentov s touto anotáciou. Tieto triedy môžeme zabezpečiť @Import‘S hodnotu argument:

@Import (VehiclePartSupplier.class) trieda VehicleFactoryConfig {}

3.3. @ImportResource

Môžeme importovať konfigurácie XML s touto anotáciou. Môžeme určiť umiestnenie súborov XML pomocou umiestnenia argument alebo s jeho aliasom hodnotu argument:

@Configuration @ImportResource ("classpath: /annotations.xml") trieda VehicleFactoryConfig {}

3.4. @PropertySource

S touto anotáciou môžeme definovať súbory vlastností pre nastavenie aplikácie:

@Configuration @PropertySource ("classpath: /annotations.properties") trieda VehicleFactoryConfig {}

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

@Configuration @PropertySource ("classpath: /annotations.properties") @PropertySource ("classpath: /vehicle-factory.properties") trieda VehicleFactoryConfig {}

3.5. @PropertySources

Túto anotáciu môžeme použiť na určenie viacerých @PropertySource konfigurácie:

@Configuration @PropertySources ({@PropertySource ("classpath: /annotations.properties"), @PropertySource ("classpath: /vehicle-factory.properties")}) trieda VehicleFactoryConfig {}

Upozorňujeme, že od verzie Java 8 to môžeme dosiahnuť pomocou funkcie opakujúcich sa anotácií, ako je popísané vyššie.

4. Záver

V tomto článku sme videli prehľad najbežnejších anotácií jarného jadra. Pozreli sme sa na to, ako nakonfigurovať fazulové vedenie a kontext aplikácie, a ako označiť triedy pre skenovanie komponentov.

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

Ďalšie » Jarné webové anotácie