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.