Proljetne temeljne bilješke

Ovaj je članak dio niza: • Proljetne jezgrene bilješke (trenutni članak) • Proljetne web-bilješke

• Bilješke proljetnog pokretanja

• Bilješke o proljetnom rasporedu

• Proljetne bilješke podataka

• Bilješke proljetnog graha

1. Pregled

Možemo iskoristiti mogućnosti Spring DI motora koristeći bilješke u org.springframework.beans.factory.annotation i org.springframework.context.annotation paketi.

Te ih često nazivamo "Proljetne jezgrovite bilješke" i pregledat ćemo ih u ovom vodiču.

2. Bilješke povezane s DI

2.1. @Autowired

Možemo koristiti @Autowired do označite ovisnost koju će Spring riješiti i ubrizgati. Ovu napomenu možemo koristiti s konstruktorom, postavljačem ili ubrizgavanjem polja.

Ubrizgavanje konstruktora:

klasa Automobil {Motor motora; @Automobilski automobil (motor motora) {this.engine = motor; }}

Ubrizgavanje setera:

klasa Automobil {Motor motora; @Autowired void setEngine (motor motora) {this.engine = motor; }}

Terensko ubrizgavanje:

klasa Automobil {@Autowired Engine engine; }

@Autowired ima boolean argument pozvan potreban sa zadanom vrijednošću od pravi. Ugađa ponašanje Springa kad ne pronađe odgovarajući grah za žicu. Kada pravi, izuzetak je izbačen, inače ništa nije ožičeno.

Imajte na umu da ako koristimo ubrizgavanje konstruktora, svi su argumenti konstruktora obvezni.

Počevši od verzije 4.3, ne trebamo komentirati konstruktore s @Autowired izričito ako ne deklariramo barem dva konstruktora.

Za više detalja posjetite naše članke o @Autowired i ubrizgavanje konstruktora.

2.2. @Grah

@Grah označava tvorničku metodu kojom se izrađuje proljetni grah:

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

Proljeće poziva ove metode kada je potrebna nova instanca tipa return.

Rezultirajući grah ima isto ime kao i tvornička metoda. Ako ga želimo imenovati drugačije, možemo to učiniti s Ime ili vrijednost argumenti ove napomene (argument vrijednost je zamjensko ime za argument Ime):

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

Imajte na umu da su sve metode označene s @Grah mora biti u @Konfiguracija razreda.

2.3. @Kvalifikator

Koristimo @Kvalifikator zajedno s @Autowired do navedite ID graha ili naziv graha želimo koristiti u dvosmislenim situacijama.

Na primjer, sljedeća dva graha implementiraju isto sučelje:

klasa Bike implementira Vozilo {} klasa Automobil implementira Vozilo {}

Ako proljeće treba ubrizgati a Vozilo grah, završava s više podudarnih definicija. U takvim slučajevima možemo dati naziv graha izričito koristeći @Kvalifikator bilješka.

Korištenje ubrizgavanja konstruktora:

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

Korištenje ubrizgavanja setera:

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

Alternativno:

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

Korištenje ubrizgavanja na terenu:

@Autowired @Qualifier ("bicikl") Vozilo vozila;

Za detaljniji opis pročitajte ovaj članak.

2.4. @Potreban

@Potreban na metodama postavljača za označavanje ovisnosti koje želimo popuniti kroz XML:

@Required void setColor (String color) {this.color = color; }

Inače, BeanInitializationException bit će bačen.

2.5. @Vrijednost

Možemo koristiti @Vrijednost za ubrizgavanje vrijednosti svojstava u grah. Kompatibilan je s konstruktorom, postavljačem i ubrizgavanjem polja.

Ubrizgavanje konstruktora:

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

Ubrizgavanje setera:

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

Alternativno:

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

Terensko ubrizgavanje:

@Value ("8") int cylinderCount;

Naravno, ubrizgavanje statičkih vrijednosti nije korisno. Stoga možemo koristiti niz rezerviranih mjesta u @Vrijednost na žičane vrijednosti definirani u vanjskim izvorimana primjer u .Svojstva ili .yaml datoteke.

Pretpostavimo sljedeće .Svojstva datoteka:

motor.fuelType = benzin

Možemo ubrizgati vrijednost motor.tip goriva sa sljedećim:

@Value ("$ {engine.fuelType}") String fuelType;

Možemo koristiti @Vrijednost čak i sa SpEL-om. Napredniji primjeri mogu se naći u našem članku o @Vrijednost.

2.6. @Ovisi o

Ovu bilješku možemo koristiti za izradu Proljeća inicijalizirajte drugi grah prije označenog. Obično je to ponašanje automatsko, na temelju eksplicitnih ovisnosti između graha.

Trebamo samo ovu napomenu kad su ovisnosti implicitne, na primjer, učitavanje JDBC upravljačkog programa ili inicijalizacija statičke varijable.

Možemo koristiti @Ovisi o na zavisnoj klasi koja specificira imena graha ovisnosti. Napomena vrijednost argumentu je potreban niz koji sadrži nazive graha ovisnosti:

Klasa automobila @DependsOn ("motor") implementira vozilo {}

Alternativno, ako grah definiramo s @Grah napomena, tvornička metoda treba biti označena s @Ovisi o:

@Bean @DependsOn ("gorivo") Motor motora () {povratak novog motora (); }

2.7. @Lijen

Koristimo @Lijen kad želimo lijeno inicijalizirati svoj grah. Prema zadanim postavkama Spring stvara sve singleton grah nestrpljivo pri pokretanju / pokretanju konteksta aplikacije.

Međutim, postoje slučajevi kada moramo stvoriti grah kad ga zatražimo, a ne prilikom pokretanja aplikacije.

Ova se napomena ponaša različito, ovisno o tome gdje smo je točno postavili. Možemo ga staviti na:

  • a @Grah anotirana tvornička metoda zrna za odgodu poziva metode (dakle stvaranje zrna)
  • a @Konfiguracija razreda i sve sadržano @Grah to će utjecati na metode
  • a @Komponenta razreda, što nije a @Konfiguracija klase, ovaj će grah biti lijeno inicijaliziran
  • an @Autowired konstruktor, postavljač ili polje za lijeno učitavanje same ovisnosti (putem proxyja)

Ova bilješka ima argument imenovan vrijednost sa zadanom vrijednošću od pravi. Korisno je nadjačati zadano ponašanje.

Na primjer, označavanje graha koji će se nestrpljivo učitati kada je globalna postavka lijena ili specifična konfiguracija @Grah metode za željno utovar u a @Konfiguracija razred označen sa @Lijen:

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

Za daljnje čitanje, posjetite ovaj članak.

2.8. @Pogledaj

Metoda označena s @Pogledaj govori Springu da vrati instancu tipa return metode kada je pozovemo.

Detaljne informacije o bilješci nalaze se u ovom članku.

2.9. @ Primarno

Ponekad moramo definirati više graha iste vrste. U tim će slučajevima injekcija biti neuspješna jer proljeće nema pojma koji grah trebamo.

Već smo vidjeli opciju za rješavanje ovog scenarija: označavanjem svih mjesta ožičenja @Kvalifikator i navedite naziv potrebnog graha.

Međutim, većinu vremena trebamo određeni grah, a rijetko i ostali. Možemo koristiti @ Primarno da pojednostavim ovaj slučaj: ako označavamo najčešće korišteni grah sa @ Primarno odabrat će se na nekvalificiranim mjestima ubrizgavanja:

@Component @Primary class Car implements Vehicle {} @Component class Bike implementira Vehicle {} @Component class Driver {@Autowired Vehicle vehicle; } @Component class Biker {@Autowired @Qualifier ("bike") vozilo; }

U prethodnom primjeru Automobil je primarno vozilo. Stoga je u Vozač razreda, Proljeće ubrizgava a Automobil grah. Naravno, u Biker grah, vrijednost polja vozilo bit će a Bicikl objekt jer je kvalificiran.

2.10. @Skop

Koristimo @Skop definirati opseg a @Komponenta razred ili a @Grah definicija. Može biti i jedno i drugo singleton, prototip, zahtjev, sesija, globalSession ili neki prilagođeni opseg.

Na primjer:

@Component @Scope ("prototype") klasa Engine {}

3. Bilješke o konfiguraciji konteksta

Kontekst aplikacije možemo konfigurirati s bilješkama opisanim u ovom odjeljku.

3.1. @Profil

Ako želimo da proljeće koristi @Komponenta razred ili a @Grah metoda samo kada je aktivan određeni profil, možemo ga označiti s @Profil. Naziv profila možemo konfigurirati pomoću vrijednost argument napomene:

Klasa bicikla @Component @Profile ("sportDay") implementira vozilo {}

Više o profilima možete pročitati u ovom članku.

3.2. @Uvoz

Možemo koristiti specifično @Konfiguracija klase bez skeniranja komponenata uz ovu napomenu. Možemo pružiti te satove @Uvoz‘S vrijednost argument:

Klasa @Import (VehiclePartSupplier.class) VehicleFactoryConfig {}

3.3. @ImportResource

Možemo uvoz XML konfiguracija uz ovu napomenu. Lokacije XML datoteka možemo odrediti pomoću lokacijama argument, ili sa zamjenskim imenom, vrijednost argument:

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

3.4. @PropertySource

Pomoću ove bilješke možemo definirati datoteke svojstava za postavke programa:

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

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

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

3.5. @PropertySources

Ovu bilješku možemo koristiti za određivanje višestrukih @PropertySource konfiguracije:

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

Imajte na umu da od Jave 8 to možemo postići sa značajkom ponavljanja bilješki kao što je gore opisano.

4. Zaključak

U ovom smo članku vidjeli pregled najčešćih proljetnih napomena. Vidjeli smo kako konfigurirati bean ožičenje i kontekst aplikacije te kako označiti klase za skeniranje komponenata.

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

Sljedeći » Proljetne web bilješke