Tavasz - injekciós gyűjtemények

1. Bemutatkozás

Ebben az oktatóanyagban bemutatjuk, hogyan kell beadni Jáva a tavaszi keretrendszert használó gyűjtemények.

Egyszerűen fogalmazva, példákat mutatunk be a Lista, térkép, készlet gyűjtési felületek.

2. Lista Val vel @Autowired

Hozzunk létre egy példababot:

public class CollectionsBean {@Autowired private List nameList; public void printNameList () {System.out.println (névLista); }}

Itt kijelentettük a névlista vagyontárgy a Lista nak,-nek Húr értékek.

Ebben a példában a terepi injekciót használjuk névlista. Ezért feltettük a @Autowired annotáció.

Ha többet szeretne megtudni a függőségi injekcióról vagy annak megvalósításának különböző módjairól, olvassa el ezt az útmutatót.

Ezt követően regisztráljuk a CollectionsBean a konfigurációs beállítási osztályban:

@Configuration public class CollectionConfig {@Bean public CollectionsBean getCollectionsBean () {return new CollectionsBean (); } @Bean public List nameList () {return Arrays.asList ("John", "Adam", "Harry"); }}

A regisztráció mellett CollectionsBean, új listát is beadunk azáltal, hogy kifejezetten inicializáljuk és külön-külön visszaküldjük @Bab konfiguráció.

Most tesztelhetjük az eredményeket:

ApplicationContext context = új AnnotationConfigApplicationContext (CollectionConfig.class); CollectionsBean gyűjteményekBean = context.getBean (CollectionsBean.class); collectionsBean.printNameList ();

A printNameList () metódus kimenete:

[John, Adam, Harry]

3. Készlet Konstruktor befecskendezésével

Ha ugyanazt a példát szeretné beállítani a Készlet gyűjtemény, módosítsuk a CollectionsBean osztály:

public class CollectionsBean {private Set nameSet; public CollectionsBean (Sztringek beállítása) {this.nameSet = stringek; } public void printNameSet () {System.out.println (nameSet); }}

Ezúttal egy konstruktor injekciót szeretnénk használni a nameSet ingatlan. Ehhez a konfigurációs osztály megváltoztatása is szükséges:

@Bean public CollectionsBean getCollectionsBean () {return new CollectionsBean (new HashSet (Arrays.asList ("John", "Adam", "Harry"))); }

4. Térkép Szetter injekcióval

Ugyanezt a logikát követve adjuk hozzá a névTérkép mező a térképinjekció bemutatásához:

public class CollectionsBean {private Map nameMap; @Autowired public void setNameMap (Map nameMap) {this.nameMap = névMap; } public void printNameMap () {System.out.println (névMap); }}

Ezúttal szetter módszerünk van a szetter függőségi injekció alkalmazására. Hozzá kell adnunk a Térkép kód inicializálása a konfigurációs osztályban:

@Bean public Map nameMap () {Map nameMap = new HashMap (); nameMap.put (1, "John"); névMap.put (2, "Ádám"); nameMap.put (3, "Harry"); return nameMap; }

Az eredmények a printNameMap () módszer:

{1 = János, 2 = Ádám, 3 = Harry}

5. Bean referenciák beadása

Nézzünk meg egy példát, ahol a bab elemekre utalunk, mint a gyűjtemény elemei.

Először hozzuk létre a babot:

public class BaeldungBean {private String name; // konstruktor}

És adj hozzá egy Lista nak,-nek BaeldungBean mint tulajdont a CollectionsBean osztály:

public class CollectionsBean {@Autowired (kötelező = hamis) privát lista beanList; public void printBeanList () {System.out.println (beanList); }}

Ezután mindegyikhez hozzáadjuk a Java konfigurációs gyári metódusait BaeldungBean elem:

@Configuration public class CollectionConfig {@Bean public BaeldungBean getElement () {return new BaeldungBean ("John"); } @Bean public BaeldungBean getAnotherElement () {return new BaeldungBean ("Adam"); } @Bean public BaeldungBean getOneMoreElement () {return new BaeldungBean ("Harry"); } // egyéb gyári módszerek}

A tavaszi tartály befecskendezi az egyes babokat BaeldungBean írja be egy gyűjteménybe.

Ennek tesztelésére a collectionsBean.printBeanList () módszer. A kimenet a bab neveket listaelemként mutatja:

[John, Harry, Adam]

Most, vegyünk fontolóra egy forgatókönyvet, amikor nincs a BaeldungBean. Ha nincs a BaeldungBean regisztrálva az alkalmazás kontextusában, Spring kivételt vet, mert hiányzik a szükséges függőség.

Tudjuk használni @Autowired (kötelező = hamis) a függőség opcionálisként való megjelölésére. Kivétel elvetése helyett a bablista nem inicializálódik, és értéke megmarad nulla.

Ha üres listára van szükségünk helyett nulla, inicializálhatjuk bablista egy új Tömb lista:

@Autowired (kötelező = hamis) privát lista beanList = new ArrayList ();

5.1. Használata @Rendelés babot válogatni

Megadhatjuk a bab sorrendjét, miközben befecskendezzük a gyűjteménybe.

Erre a célra a @Rendelés megjegyzés és adja meg az indexet:

@Configuration public class CollectionConfig {@Bean @Order (2) public BaeldungBean getElement () {return new BaeldungBean ("John"); } @Bean @Order (3) public BaeldungBean getAnotherElement () {return new BaeldungBean ("Adam"); } @Bean @Order (1) public BaeldungBean getOneMoreElement () {return new BaeldungBean ("Harry"); }}

A tavaszi edény először a babot adja be a névvel "Harry", mivel a legalacsonyabb rendelési értékkel rendelkezik.

Ezután beadja a "János", és végül a "Ádám" bab:

[Harry, John, Adam]

Tudj meg többet @Rendelés ebben az útmutatóban.

5.2. Használata @ Minősítő a Bab kiválasztásához

Használhatjuk a @ Minősítő hogy kiválassza a beillesztendő babot az adott gyűjteménybe, amely megfelel a @ Minősítő név.

Így használjuk az injekciós pontra:

@Autowired @Qualifier ("CollectionsBean") privát lista beanList;

Ezután ugyanazzal jelöljük @ Minősítő a babot, amelyet be akarunk fecskendezni a Lista:

@Configuration public class CollectionConfig {@Bean @Qualifier ("CollectionsBean") public BaeldungBean getElement () {return new BaeldungBean ("John"); } @Bean public BaeldungBean getAnotherElement () {return new BaeldungBean ("Adam"); } @Bean public BaeldungBean getOneMoreElement () {return new BaeldungBean ("Harry"); } // egyéb gyári módszerek}

Ebben a példában meghatározzuk, hogy a bab a névvel "János" befecskendezik a Lista nevezett „CollectionsBean”. Az itt tesztelt eredmények:

ApplicationContext context = új AnnotationConfigApplicationContext (CollectionConfig.class); CollectionsBean gyűjteményekBean = context.getBean (CollectionsBean.class); gyűjteményekBean.printBeanList ();

A kimenetből azt látjuk, hogy gyűjteményünknek csak egy eleme van:

[János]

6. Üres lista beállítása alapértelmezett értékként

A beírt List tulajdonság alapértelmezett értékét üres listaként állíthatjuk be a Collections.emptyList () statikus módszer:

public class CollectionsBean {@Value ("$ {names.list:} # {T (java.util.Collections) .emptyList ()}") privát lista neveListWithDefaultValue; public void printNameListWithDefaults () {System.out.println (névListaWithDefaultValue); }}

Ha ezt a „names.list” kulccsal futtatjuk, amelyet a tulajdonságfájlon keresztül nem inicializáltunk:

collectionsBean.printNameListWithDefaults ();

Kimenetként egy üres listát kapunk:

[ ]

7. Összegzés

Ezzel az útmutatóval megtanultuk, hogyan kell különböző típusú Java-gyűjteményeket injektálni a Spring keretrendszer segítségével.

Megvizsgáltuk az injekciót referenciatípusokkal és azt is, hogy miként válasszuk ki vagy rendelhetjük őket a gyűjtemény belsejében.

Szokás szerint a teljes kód elérhető a GitHub projektben.