Forårskernebemærkninger

Denne artikel er en del af en serie: • Spring Core Annotations (nuværende artikel) • Spring Web Annotations

• Kommentarer om forårstøvler

• Kommentarer om forårets planlægning

• Kommentarer om forårsdata

• Kommentarer om forårets bønner

1. Oversigt

Vi kan udnytte funktionerne i Spring DI-motor ved hjælp af kommentarerne i org.springframework.beans.factory.annotation og org.springframework.context.annotation pakker.

Vi kalder ofte disse "Forårskerneanoteringer", og vi gennemgår dem i denne vejledning.

2. DI-relaterede kommentarer

2.1. @Autowired

Vi kan bruge @Autowired til markere en afhængighed, som foråret vil løse og injicere. Vi kan bruge denne kommentar med en konstruktør, setter eller feltinjektion.

Konstruktørinjektion:

klasse bil {motor motor; @Autowired Car (motor motor) {this.engine = motor; }}

Setterinjektion:

klasse bil {motor motor; @Autowired ugyldigt setEngine (motor motor) {this.engine = motor; }}

Markinjektion:

klasse bil {@Autowired Engine motor; }

@Autowired har en boolsk argument kaldet krævet med en standardværdi på rigtigt. Det indstiller forårets opførsel, når det ikke finder en passende bønne at tilslutte. Hvornår rigtigt, en undtagelse kastes, ellers er der ikke noget, der er forbundet.

Bemærk, at hvis vi bruger konstruktørinjektion, er alle konstruktørargumenter obligatoriske.

Fra og med version 4.3 behøver vi ikke at kommentere konstruktører med @Autowired eksplicit, medmindre vi erklærer mindst to konstruktører.

For flere detaljer, besøg vores artikler om @Autowired og konstruktørinjektion.

2.2. @Bønne

@Bønne markerer en fabriksmetode, der instantierer en springbønne:

@Bean Engine motor () {returner ny Engine (); }

Spring kalder disse metoder når der kræves en ny forekomst af returtypen.

Den resulterende bønne har samme navn som fabriksmetoden. Hvis vi vil navngive det anderledes, kan vi gøre det med navn eller den værdi argumenterne for denne kommentar (argumentet værdi er et alias for argumentet navn):

@Bean ("motor") Motor getEngine () {returner ny motor (); }

Bemærk, at alle metoder kommenteret med @Bønne skal være i @Konfiguration klasser.

2.3. @Kvalifikator

Vi bruger @Kvalifikator sammen med @Autowired til angiv bønne-id eller bønnenavn vi ønsker at bruge i tvetydige situationer.

For eksempel implementerer de følgende to bønner den samme grænseflade:

klasse Cykelredskaber Køretøj {} klasse Køretøjsredskaber Køretøj {}

Hvis foråret skal injicere en Køretøj bønne, ender det med flere matchende definitioner. I sådanne tilfælde kan vi angive en bønnes navn eksplicit ved hjælp af @Kvalifikator kommentar.

Brug af konstruktørinjektion:

@Autowired Biker (@Qualifier ("cykel") Køretøjskøretøj) {this.vehicle = køretøj; }

Brug af setterinjektion:

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

Alternativt:

@Autowired @Qualifier ("cykel") ugyldig setVehicle (køretøjskøretøj) {this.vehicle = køretøj; }

Brug af feltinjektion:

@Autowired @Qualifier ("cykel") Køretøjskøretøj;

For en mere detaljeret beskrivelse, læs venligst denne artikel.

2.4. @Krævet

@Krævet om settermetoder til at markere afhængigheder, som vi ønsker at udfylde via XML:

@Nødvendigt ugyldigt setColor (strengfarve) {this.color = color; }

Ellers, BeanInitializationException vil blive kastet.

2.5. @Værdi

Vi kan bruge @Værdi til injektion af egenskabsværdier i bønner. Det er kompatibelt med konstruktør-, setter- og feltinjektion.

Konstruktørinjektion:

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

Setterinjektion:

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

Alternativt:

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

Markinjektion:

@Value ("8") int cylinderCount;

Det er selvfølgelig ikke nyttigt at indsprøjte statiske værdier. Derfor kan vi bruge pladsholderstrenge i @Værdi til ledningsværdier defineret i eksterne kilderf.eks. i .ejendomme eller .yaml filer.

Lad os antage følgende .ejendomme fil:

engine.fuelType = benzin

Vi kan indsprøjte værdien af motor.fuelType med følgende:

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

Vi kan bruge @Værdi selv med SpEL. Mere avancerede eksempler kan findes i vores artikel om @Værdi.

2.6. @Afhænger af

Vi kan bruge denne kommentar til at gøre foråret initialiser andre bønner inden den kommenterede. Normalt er denne adfærd automatisk baseret på de eksplicitte afhængigheder mellem bønner.

Vi har kun brug for denne kommentar når afhængighederne er implicittef.eks. indlæsning af JDBC-driver eller initialisering af statisk variabel.

Vi kan bruge @Afhænger af på den afhængige klasse, der angiver navnene på afhængighedsbønnerne. Annotationen er værdi argument har brug for et array, der indeholder afhængighedsbønnenavne:

@DependsOn ("engine") klasse Bil implementerer køretøj {}

Alternativt, hvis vi definerer en bønne med @Bønne kommentar, skal fabriksmetoden kommenteres med @Afhænger af:

@Bean @DependsOn ("brændstof") Motor motor () {returner ny motor (); }

2.7. @Doven

Vi bruger @Doven når vi vil initialisere vores bønne doven. Som standard opretter Spring alle singleton bønner ivrigt ved opstart / bootstrapping af applikationens kontekst.

Der er dog tilfælde, hvor vi er nødt til at oprette en bønne, når vi anmoder om det, ikke ved opstart af applikationen.

Denne kommentar opfører sig forskelligt afhængigt af hvor vi præcist placerer den. Vi kan sætte det på:

  • -en @Bønne annoteret bønnefabriksmetode for at forsinke metodeopkaldet (dermed oprettelse af bønner)
  • en @Konfiguration klasse og alt indeholdt @Bønne metoder vil blive påvirket
  • -en @Komponent klasse, som ikke er en @Konfiguration klasse, denne bønne initialiseres doven
  • en @Autowired konstruktør, setter eller felt for at indlæse selve afhængigheden doven (via proxy)

Denne kommentar har et argument med navnet værdi med standardværdien på rigtigt. Det er nyttigt at tilsidesætte standardadfærden.

For eksempel markering af bønner, der ivrigt skal indlæses, når den globale indstilling er doven, eller konfigurere specifik @Bønne metoder til ivrig lastning i en @Konfiguration klasse markeret med @Doven:

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

For yderligere læsning, besøg venligst denne artikel.

2.8. @Kig op

En metode, der er kommenteret med @Kig op fortæller Spring at returnere en forekomst af metodens returneringstype, når vi påberåber den.

Detaljerede oplysninger om kommentaren kan findes i denne artikel.

2.9. @Primær

Nogle gange er vi nødt til at definere flere bønner af samme type. I disse tilfælde vil injektionen mislykkes, fordi Spring ikke har nogen anelse om, hvilken bønne vi har brug for.

Vi har allerede set en mulighed for at håndtere dette scenarie: markering af alle ledningspunkter med @Kvalifikator og angiv navnet på den ønskede bønne.

Men det meste af tiden har vi brug for en bestemt bønne og sjældent de andre. Vi kan bruge @Primær for at forenkle denne sag: hvis vi markerer den hyppigst anvendte bønne med @Primær det vælges på ukvalificerede injektionssteder:

@Komponent @ Primærklasse Bilimplementeringskøretøj {} @Komponentklasse Cykelredskaber Køretøj {} @Komponentklasse Driver {@Køretøjskøretøj; } @Komponent klasse Biker {@Autowired @Qualifier ("cykel") Køretøjskøretøj; }

I det foregående eksempel Bil er det primære køretøj. Derfor i Chauffør klasse, Spring injicerer en Bil bønne. Selvfølgelig i Biker bønne, feltets værdi køretøj vil være en Cykel objekt, fordi det er kvalificeret.

2.10. @Scope

Vi bruger @Scope at definere omfanget af en @Komponent klasse eller en @Bønne definition. Det kan være enten singleton, prototype, anmodning, session, globalSession eller noget brugerdefineret omfang.

For eksempel:

@Component @Scope ("prototype") klasse motor {}

3. Kommentarer til kontekstkonfiguration

Vi kan konfigurere applikationskonteksten med de kommentarer, der er beskrevet i dette afsnit.

3.1. @Profil

Hvis vi vil have foråret brug en @Komponent klasse eller en @Bønne metode kun, når en bestemt profil er aktiv, kan vi markere det med @Profil. Vi kan konfigurere navnet på profilen med værdi kommentarens argument:

@Component @Profile ("sportDay") klasse Cykeludstyr køretøj {}

Du kan læse mere om profiler i denne artikel.

3.2. @Importere

Vi kan bruge bestemt @Konfiguration klasser uden komponentscanning med denne kommentar. Vi kan give disse klasser @Importere'S værdi argument:

@Import (VehiclePartSupplier.class) klasse VehicleFactoryConfig {}

3.3. @ImportResource

Vi kan importere XML-konfigurationer med denne kommentar. Vi kan specificere XML-filplaceringerne med placeringer argument eller med dets alias, værdi argument:

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

3.4. @PropertySource

Med denne kommentar kan vi definer egenskabsfiler til applikationsindstillinger:

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

@PropertySource udnytter Java 8 gentagne annotationsfunktion, hvilket betyder, at vi kan markere en klasse med den flere gange:

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

3.5. @PropertySources

Vi kan bruge denne kommentar til at angive flere @PropertySource konfigurationer:

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

Bemærk, at siden Java 8 kan vi opnå det samme med den gentagne kommentarfunktion som beskrevet ovenfor.

4. Konklusion

I denne artikel så vi en oversigt over de mest almindelige Spring-kerneannoteringer. Vi så, hvordan man konfigurerer bønneledninger og applikationskontekst, og hvordan man markerer klasser til komponentscanning.

Som sædvanligt er eksemplerne tilgængelige på GitHub.

Næste » Forårswebkommentarer