Tavaszi magjegyzetek

Ez a cikk egy sorozat része: • Tavaszi alapjegyzetek (aktuális cikk) • Tavaszi webjegyzetek

• Tavaszi indítójegyzetek

• Tavaszi ütemezési kommentárok

• Tavaszi adatjegyzetek

• Tavaszi babjegyzetek

1. Áttekintés

A Spring DI motor képességeit kihasználhatjuk a org.springframework.beans.factory.annotation és org.springframework.context.annotation csomagok.

Gyakran hívjuk ezeket a „Tavaszi alapjegyzetek” -nek, és áttekintjük őket ebben az oktatóanyagban.

2. DI-vel kapcsolatos kommentárok

2.1. @Autowired

Használhatjuk a @Autowired nak nek jelölje meg azt a függőséget, amelyet Spring megoldani és beadni fog. Ezt az annotációt konstruktorral, szetterrel vagy terepi injekcióval használhatjuk.

Konstruktor befecskendezése:

osztály Autó {Motor motor; @Autowired Car (Motor motor) {this.motor = motor; }}

Setter injekció:

osztály Autó {Motor motor; @Autowired void setEngine (Motor motor) {this.engine = motor; }}

Helyi injekció:

osztályú autó {@Autowired Motor motor; }

@Autowired van egy logikai nevezett érv kívánt alapértelmezett értékével igaz. Hangolja Spring viselkedését, amikor nem talál megfelelő babot a huzalozáshoz. Mikor igaz, kivételt vetnek, különben semmi nincs bekötve.

Ne feledje, hogy ha konstruktor injekciót használunk, akkor minden konstruktor argumentuma kötelező.

A 4.3-as verziótól kezdve nem kell a kivitelezőket feljegyeznünk @Autowired kifejezetten, hacsak nem deklarálunk legalább két kivitelezőt.

További részletekért látogassa meg a cikkeket @Autowired és a konstruktor befecskendezése.

2.2. @Bab

@Bab egy gyári módszert jelöl, amely a tavaszi babot példázza:

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

Spring ezeket a módszereket hívja amikor a return típusú új példányra van szükség.

Az így kapott bab neve megegyezik a gyári módszerével. Ha másképp akarjuk megnevezni, akkor megtehetjük a név vagy a érték ennek az annotációnak az érvei (az érték álneve az érvelésnek név):

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

Ne feledje, hogy az összes metódussal annotált @Bab bent kell lennie @ Konfiguráció osztályok.

2.3. @ Minősítő

Használunk @ Minősítő együtt @Autowired nak nek adja meg a bab azonosítóját vagy a bab nevét kétértelmű helyzetekben szeretnénk használni.

Például a következő két bab ugyanazt az interfészt valósítja meg:

osztályú kerékpáreszközök Jármű {} osztályú autóeszközök járművek {}

Ha Springnek injekciót kell adnia a Jármű bab, ez több megegyező meghatározással végződik. Ilyen esetekben a bab nevét megadhatjuk kifejezetten a @ Minősítő annotáció.

A konstruktor befecskendezése:

@Autowired Biker (@Qualifier ("bike") Jármű jármű) {this.jármű = jármű; }

Szetter injekció használata:

@Autowired void setVehicle (@Qualifier ("bike") Jármű jármű) {this.vehicle = jármű; }

Alternatív megoldásként:

@Autowired @Qualifier ("bike") void setVehicle (Jármű jármű) {this.vehicle = jármű; }

Helyi injekció használata:

@Autowired @Qualifier ("bike") Jármű jármű;

Részletesebb leírásért olvassa el ezt a cikket.

2.4. @Kívánt

@Kívánt az XML-en keresztül feltölteni kívánt függőségek jelölésére szolgáló szetter módszerekről:

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

Másképp, BeanInitializationException dobni fogják.

2.5. @Érték

Tudjuk használni @Érték tulajdonságértékek babba injektálásáért. Kompatibilis a kivitelező, beállító és terepi befecskendezéssel.

Konstruktor befecskendezése:

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

Setter injekció:

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

Alternatív megoldásként:

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

Helyi injekció:

@Value ("8") int cylCount;

Természetesen a statikus értékek beadása nem hasznos. Ezért használhatjuk helyőrző karakterláncok ban ben @Érték az értékek bekötésére külső forrásokban meghatározottpéldául a .tulajdonságok vagy .yaml fájlokat.

Tegyük fel a következőket .tulajdonságok fájl:

motor.fuelType = benzin

Beírhatjuk a motor.fuelType a következőkkel:

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

Tudjuk használni @Érték akár a SpEL-lel. Haladóbb példák találhatók a cikkünkről @Érték.

2.6. @Attól függ

Használhatjuk ezt az annotációt tavasz készítéséhez inicializálja a többi babot az annotált előtt. Általában ez a viselkedés automatikus, a babok közötti kifejezett függőségek alapján.

Csak erre a feliratra van szükségünk amikor a függőségek implicitekpéldául JDBC illesztőprogram betöltése vagy statikus változó inicializálása.

Tudjuk használni @Attól függ a függő osztályon adja meg a függőségi bab nevét. Az annotáció érték Az argumentumnak szüksége van egy tömbre, amely a függőségi bab nevét tartalmazza:

@DependsOn ("motor") osztályú autóeszközök Jármű {}

Alternatív megoldásként, ha egy babot definiálunk a @Bab megjegyzéssel, a gyári módszert meg kell jelölni @Attól függ:

@Bean @DependsOn ("üzemanyag") Motor motorja () {return new Engine (); }

2.7. @Lusta

Használunk @Lusta amikor lustán szeretnénk inicializálni a babunkat. Alapértelmezés szerint a Spring minden egyes babot lelkesen hoz létre az alkalmazáskörnyezet indításakor / indításakor.

Vannak azonban esetek, amikor A babot akkor kell létrehoznunk, amikor ezt kérjük, nem az alkalmazás indításakor.

Ez a megjegyzés másképp viselkedik attól függően, hogy pontosan hová helyezzük. Felvehetjük:

  • a @Bab kommentált babgyári módszer, a metódus hívásának késleltetése (ezért a bab létrehozása)
  • a @Konfiguráció osztály és minden benne van @Bab módszereket érinteni fogja
  • a @Összetevő osztály, ami nem a @ Konfiguráció osztályban ezt a babot lustán inicializálják
  • an @Autowired konstruktor, beállító vagy mező, hogy magát a függőséget lustán töltse be (proxy útján)

Ennek a kommentárnak van egy megnevezett argumentuma érték alapértelmezett értékével igaz. Hasznos felülírni az alapértelmezett viselkedést.

Például a bab jelölése lelkesen töltendőnek, ha a globális beállítás lusta, vagy konfigurálja az adott beállítást @Bab módszerek a lelkes terhelésre a @ Konfiguráció -val jelölt osztály @Lusta:

@Configuration @Lazy osztály VehicleFactoryConfig {@Bean @Lazy (false) Motormotor () {return new Engine (); }}

További információkért kérjük, látogassa meg ezt a cikket.

2.8. @Nézz fel

A módszerrel annotált módszer @Nézz fel megmondja Springnek, hogy adja vissza a metódus visszatérési típusának egy példányát, amikor meghívjuk.

Az annotációval kapcsolatos részletes információk ebben a cikkben találhatók.

2.9. @Elsődleges

Néha meg kell határoznunk több azonos típusú babot. Ezekben az esetekben az injekció sikertelen lesz, mert Tavasznak fogalma sincs, melyik babra van szükségünk.

Már láttunk egy lehetőséget ennek a forgatókönyvnek a kezelésére: az összes vezetékezési pont jelölése @ Minősítő és adja meg a szükséges bab nevét.

Azonban legtöbbször szükségünk van egy speciális babra, a többire ritkán. Tudjuk használni @Elsődleges ennek az esetnek az egyszerűsítése érdekében: ha azzal jelöljük a leggyakrabban használt babot @Elsődleges minősítés nélküli injekciós pontokon választják ki:

@Component @Primary osztály Autóeszközök Jármű {} @Component osztály Kerékpáreszközök Járművek {} @Component osztályvezetők {@Autowired Járművek; } @Component class Biker {@Autowired @Qualifier ("bike") Jármű jármű; }

Az előző példában Autó az elsődleges jármű. Ezért a Sofőr osztály, Spring beadja a Autó bab. Természetesen a Motoros bab, a mező értéke jármű lesz a Bicikli objektum, mert minősített.

2.10. @Scope

Használunk @Scope hogy meghatározzuk a @Összetevő osztály vagy a @Bab meghatározás. Ez lehet akár szingulett, prototípus, kérés, munkamenet, globalSession vagy valamilyen egyedi hatókör.

Például:

@Component @Scope ("prototípus") osztályú motor {}

3. A kontextus konfigurációjának kommentárjai

Konfigurálhatjuk az alkalmazás kontextusát az ebben a szakaszban leírt kommentárokkal.

3.1. @Profil

Ha azt akarjuk, hogy Tavasz használj @Összetevő osztály vagy a @Bab csak akkor, ha egy adott profil aktív, ezzel jelölhetjük @Profil. A profil nevét konfigurálhatjuk a érték a feljegyzés argumentuma:

@Component @Profile ("sportDay") osztályú kerékpáreszközök Jármű {}

Ebben a cikkben többet olvashat a profilokról.

3.2. @Import

Tudjuk használni különleges @ Konfiguráció osztályok alkatrész szkennelés nélkül ezzel az annotációval. Biztosíthatjuk ezeket az osztályokat @Import’S érték érv:

@Import (VehiclePartSupplier.class) osztály VehicleFactoryConfig {}

3.3. @ImportResource

Tudunk importáljon XML-konfigurációkat ezzel az annotációval. Az XML fájl helyét a helyszínek érv, vagy annak álnevével a érték érv:

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

3.4. @PropertySource

Ezzel az annotációval megtehetjük tulajdonságfájlokat adhat meg az alkalmazásbeállításokhoz:

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

@PropertySource kihasználja a Java 8 ismétlődő kommentárok funkcióját, ami azt jelenti, hogy többször is megjelölhetünk vele egy osztályt:

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

3.5. @PropertySources

Használhatjuk ezt a feliratot több megadására @PropertySource konfigurációk:

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

Ne feledje, hogy a Java 8 óta ugyanazt érhetjük el a fent leírt ismétlődő kommentár funkcióval.

4. Következtetés

Ebben a cikkben áttekintettük a leggyakoribb tavaszi magjegyzeteket. Láttuk, hogyan konfigurálhatjuk a babvezetéket és az alkalmazás kontextusát, és hogyan jelölhetjük meg az osztályokat az alkatrész-szkenneléshez.

Szokás szerint a példák elérhetők a GitHub oldalon.

Következő » Tavaszi webes kommentárok