Jar - vkladanie zbierok
1. Úvod
V tomto tutoriáli si ukážeme, ako na to vstreknúť Java zbierky využívajúce jarný rámec.
Jednoducho povedané, ukážeme príklady pomocou Zoznam, Mapa, Nastaviť zberné rozhrania.
2. Zoznam S @Autowired
Vytvorme príklad fazule:
verejná trieda CollectionsBean {@Autowired private List nameList; public void printNameList () {System.out.println (nameList); }}
Tu sme vyhlásili zoznam mien majetok držať a Zoznam z String hodnoty.
V tomto príklade používame injekciu poľa pre zoznam mien. Preto sme dali @Autowired anotácia.
Ak sa chcete dozvedieť viac o vkladaní závislostí alebo o rôznych spôsoboch jeho implementácie, prečítajte si túto príručku.
Potom zaregistrujeme ZbierkyBean v triede konfiguračného nastavenia:
@Configuration verejná trieda CollectionConfig {@Bean verejné CollectionsBean getCollectionsBean () {vrátiť nový CollectionsBean (); } @Bean public List nameList () {return Arrays.asList ("John", "Adam", "Harry"); }}
Okrem registrácie ZbierkyBean, vložíme nový zoznam aj explicitnou inicializáciou a vrátením ako samostatného @Bean konfigurácia.
Teraz môžeme testovať výsledky:
ApplicationContext context = nový AnnotationConfigApplicationContext (CollectionConfig.class); CollectionsBean collectionsBean = context.getBean (CollectionsBean.class); collectionsBean.printNameList ();
Výstup metódy printNameList ():
[John, Adam, Harry]
3. Nastaviť S injektorom Constructor
Rovnaký príklad vytvoriť s Nastaviť zbierka, upravme ZbierkyBean trieda:
verejná trieda CollectionsBean {private Set nameSet; public CollectionsBean (sada reťazcov) {this.nameSet = reťazce; } public void printNameSet () {System.out.println (nameSet); }}
Tentokrát chceme použiť inicializáciu konštruktora na inicializáciu sady mien nehnuteľnosť. To si vyžaduje aj zmeny v konfiguračnej triede:
@Bean public CollectionsBean getCollectionsBean () {return new CollectionsBean (new HashSet (Arrays.asList ("John", "Adam", "Harry"))); }
4. Mapa S injekčným setrom
Podľa rovnakej logiky pridajme nameMap pole na vloženie mapy:
public class CollectionsBean {private Map nameMap; @Autowired public void setNameMap (mapa nameMap) {this.nameMap = nameMap; } public void printNameMap () {System.out.println (nameMap); }}
Tentokrát máme metódu setter, aby sme mohli použiť injekciu závislosti setter. Musíme tiež pridať Mapa inicializačný kód v konfiguračnej triede:
@Bean public Mapa nameMap () {Map nameMap = new HashMap (); nameMap.put (1, "John"); nameMap.put (2, "Adam"); nameMap.put (3, "Harry"); návrat nameMap; }
Výsledky po vyvolaní printNameMap () metóda:
{1 = Ján, 2 = Adam, 3 = Harry}
5. Vkladanie referencií fazule
Pozrime sa na príklad, kde ako prvky kolekcie vkladáme odkazy na fazule.
Najprv si vytvoríme fazuľu:
public class BaeldungBean {private String name; // konštruktor}
A pridajte a Zoznam z BaeldungBean ako majetok do ZbierkyBean trieda:
public class CollectionsBean {@Autowired (required = false) súkromný zoznam beanList; public void printBeanList () {System.out.println (beanList); }}
Ďalej pre každú pridáme metódy továrne na konfiguráciu Java BaeldungBean element:
@Configuration public class CollectionConfig {@Bean public BaeldungBean getElement () {vrátiť nový BaeldungBean ("John"); } @Bean public BaeldungBean getAnotherElement () {vrátiť nový BaeldungBean ("Adam"); } @Bean public BaeldungBean getOneMoreElement () {vrátiť nový BaeldungBean ("Harry"); } // ďalšie výrobné metódy}
Nádoba Spring vstrekuje jednotlivé zrná fazule BaeldungBean typ do jednej zbierky.
Aby sme to otestovali, vyvoláme collectionsBean.printBeanList () metóda. Výstup zobrazuje názvy fazule ako prvky zoznamu:
[John, Harry, Adam]
Teraz, uvažujme o scenári, keď neexistuje a BaeldungBean. Ak nie je BaeldungBean zaregistrovaný v kontexte aplikácie, Spring vyvolá výnimku, pretože chýba požadovaná závislosť.
Môžeme použiť @Autowired (vyžadované = nepravdivé) označiť závislosť ako voliteľnú. Namiesto výnimky platí: beanList nebude inicializovaný a jeho hodnota zostane nulový.
Ak namiesto toho potrebujeme prázdny zoznam nulový, môžeme inicializovať beanList s novým ArrayList:
@Autowired (required = false) private List beanList = new ArrayList ();
5.1. Použitím @Objednať na triedenie fazule
Môžeme určiť poradie fazúľ pri vstrekovaní do zbierky.
Na tento účel používame @Objednať anotáciu a zadajte index:
@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"); }}
Jarná nádoba najskôr vstrekne fazuli meno "Harry", pretože má najnižšiu hodnotu objednávky.
Potom vstrekne „John“, a nakoniec „Adam“ fazuľa:
[Harry, John, Adam]
Naučiť sa viac o @Objednať v tejto príručke.
5.2. Použitím @Qualifier na výber fazule
Môžeme použiť @Qualifier aby ste vybrali fazuľu, ktorá sa má vstreknúť do konkrétnej zbierky, ktorá zodpovedá @Qualifier názov.
Takto to používame pre miesto injekcie:
@Autowired @Qualifier ("CollectionsBean") súkromný zoznam beanList;
Potom označíme rovnakým @Qualifier fazuľa, ktorú chceme vstreknúť do Zoznam:
@Configuration public class CollectionConfig {@Bean @Qualifier ("CollectionsBean") public BaeldungBean getElement () {return new BaeldungBean ("John"); } @Bean public BaeldungBean getAnotherElement () {vrátiť nový BaeldungBean ("Adam"); } @Bean public BaeldungBean getOneMoreElement () {vrátiť nový BaeldungBean ("Harry"); } // ďalšie výrobné metódy}
V tomto príklade zadáme fazuľu s menom „John“ sa vstrekne do Zoznam menovaný „CollectionsBean“. Výsledky, ktoré tu testujeme:
ApplicationContext context = nový AnnotationConfigApplicationContext (CollectionConfig.class); CollectionsBean collectionsBean = context.getBean (CollectionsBean.class); collectionsBean.printBeanList ();
Z výstupu vidíme, že naša zbierka má iba jeden prvok:
[John]
6. Nastavenie prázdneho zoznamu ako predvolenej hodnoty
Predvolenú hodnotu pre vloženú vlastnosť List môžeme nastaviť ako prázdny zoznam pomocou znaku Collections.emptyList () statická metóda:
verejná trieda CollectionsBean {@Value ("$ {names.list:} # {T (java.util.Collections) .emptyList ()}")) súkromný zoznam nameListWithDefaultValue; public void printNameListWithDefaults () {System.out.println (nameListWithDefaultValue); }}
Ak to spustíme s kľúčom „names.list“, ktorý nie je inicializovaný prostredníctvom súboru vlastností:
collectionsBean.printNameListWithDefaults ();
Ako výstup dostaneme prázdny zoznam:
[ ]
7. Zhrnutie
V tejto príručke sme sa naučili, ako vložiť rôzne typy zbierok Java pomocou jarného rámca.
Preskúmali sme tiež injekciu s referenčnými typmi a ako ich vybrať alebo objednať v rámci zbierky.
Kompletný kód je ako obvykle k dispozícii v projekte GitHub.