A tavaszi @ Minősítő kommentár

1. Áttekintés

Ebben a cikkben feltárjuk mi a @ Minősítő az annotáció segíthet nekünk, mely problémákat oldja meg, és hogyan kell használni.

Azt is elmagyarázzuk, hogy miben különbözik a @Elsődleges feliratozás és a név szerinti automatikus elküldés.

2. A pontosítás automatikus igénye

A @Autowired az annotáció nagyszerű módja annak, hogy egyértelművé tegyük a tavaszi függőség beadásának szükségességét. Bár hasznos, vannak olyan esetek, amelyeknél ez a megjegyzés önmagában nem elegendő ahhoz, hogy Spring megértse, melyik babot kell beadnia.

Alapértelmezés szerint a Spring típus szerint oldja fel az automatikusan bekötött bejegyzéseket.

Ha egynél több azonos típusú bab érhető el a tartályban, a keret dobni fog NoUniqueBeanDefinitionException, jelezve, hogy egynél több bab áll rendelkezésre az automatikus vezetékezéshez.

Képzeljünk el egy olyan helyzetet, amelyben két lehetséges jelölt létezik Spring számára, aki babkollaborátorként adhatja be az adott esetet:

@Component ("fooFormatter") public class FooFormatter implementálja a Formatter {public String format () {return "foo"; }} @Component ("barFormatter") public class A BarFormatter megvalósítja a Formatter {public String format () {return "bar" parancsot; }} @Component public class FooService {@Autowired private Formatter formatter; }

Ha megpróbálunk betölteni FooService kontextusunkba a tavaszi keret a NoUniqueBeanDefinitionException. Ez azért van, mert Spring nem tudja, melyik babot kell beadni. A probléma elkerülése érdekében számos megoldás létezik. A @ Minősítő az annotáció az egyik.

3. @ Minősítő Megjegyzés

A @ Minősítő annotáció, megtehetjük kiküszöbölni azt a kérdést, hogy melyik babot kell beadni.

Nézzük át korábbi példánkat, és nézzük meg, hogyan oldjuk meg a problémát a @ Minősítő megjegyzés, hogy melyik babot szeretnénk használni:

nyilvános osztályú FooService {@Autowired @Qualifier ("fooFormatter") privát formázó formázó; }

A @ Minősítő annotáció a használni kívánt konkrét megvalósítás nevével együtt - ebben a példában Foo - elkerülhetjük a kétértelműséget, amikor Spring több, azonos típusú babot talál.

Figyelembe kell vennünk, hogy a használandó minősítő név az @Összetevő annotáció.

Ne feledje, hogy használhattuk a @ Minősítő kommentár a Formázó osztályok megvalósítása, ahelyett, hogy megadnák a neveket azokban @Összetevő annotációk, ugyanolyan hatás elérése érdekében:

@Component @Qualifier ("fooFormatter") nyilvános osztály A FooFormatter megvalósítja a Formatter {// ...} @Component @Qualifier ("barFormatter") nyilvános osztályt a BarFormatter a Formatter alkalmazást {// ...} 

4. @ Minősítő vs. @Elsődleges

Van egy másik feljegyzés @Elsődleges hogy felhasználhatjuk annak eldöntésére, hogy melyik babot kell beadni, ha kétértelműség van a függőségi injekcióval kapcsolatban.

Ez az annotáció meghatároz egy preferenciát, ha több azonos típusú bab van jelen. A bab kapcsolódik a @Elsődleges annotációt használunk, hacsak másként nem jelezzük.

Lássunk egy példát:

@Configuration public class Config {@Bean public Employee johnEmployee () {return new Employee ("John"); } @Bean @ Elsődleges nyilvános alkalmazott tonyEmployee () {return new Employee ("Tony"); }}

Ebben a példában mindkét módszer ugyanazt adja vissza Munkavállaló típus. Az a bab, amelyet Spring bead, a módszerrel visszatér tonyEmployee. Ez azért van, mert tartalmazza a @Elsődleges annotáció. Ez a megjegyzés akkor hasznos, amikor szeretnénk adja meg, hogy egy bizonyos típusú babot melyik alapértelmezés szerint kell beadni.

És ha valamelyik injekció beadási pontján szükségünk lenne a másik babra, akkor külön meg kell jelölnünk. Megtehetjük a @ Minősítő annotáció. Például megadhatjuk, hogy a. Által visszaadott babot akarjuk használni johnEmployee módszer a @ Minősítő annotáció.

Érdemes ezt megjegyezni ha mind a @ Minősítő és @Elsődleges kommentárok vannak jelen, akkor a @ Minősítő az annotáció elsőbbséget élvez. Alapvetően, @Elsődleges definiál egy alapértelmezést, míg @ Minősítő nagyon specifikus.

Nézzük meg a @Elsődleges kommentár, ezúttal a kezdeti példával:

@Component @Primary public class A FooFormatter megvalósítja a Formatter-t {// ...} @Component public class a BarFormatter valósítja meg a Formatter-t {// ...} 

Ebben az esetben a @Elsődleges a kommentár az egyik megvalósító osztályba kerül és egyértelművé teszi a forgatókönyvet.

5. @ Minősítő vs Autowiring név szerint

Egy másik módja annak, hogy a több bab között döntsön az automatikus vezetékezés során, az a mező nevének használata az injekció beadásához. Ez az alapértelmezett beállítás abban az esetben, ha nincs más tipp a Spring-hez. Lássunk néhány kódot az első példánk alapján:

nyilvános osztályú FooService {@Autowired private Formatter fooFormatter; }

Ebben az esetben Spring meghatározza, hogy a beadandó bab az FooFormatter egyet, mivel a mezőnév megegyezik azzal az értékkel, amelyet a @Összetevő annak a babnak a jegyzete.

6. Következtetés

Leírtuk azokat a forgatókönyveket, amelyekben meg kell határoznunk, hogy mely babot kell beadni. Különösen leírtuk a @ Minősítő megjegyzéssel, és összehasonlította más hasonló módszerekkel annak meghatározásához, hogy mely babot kell használni.

Szokás szerint a cikk teljes kódja elérhető a GitHubon.