Proljeće - Zbirke za ubrizgavanje

1. Uvod

U ovom uputstvu ćemo pokazati kako to učiniti ubrizgati Java kolekcije koje koriste okvir Spring.

Jednostavno rečeno, demonstrirat ćemo primjere s Popis, karta, set sučelja za prikupljanje.

2. Popis S @Autowired

Stvorimo primjer graha:

javni razred CollectionsBean {@Autowired privatni popis nameList; javna praznina printNameList () {System.out.println (nameList); }}

Evo, proglasili smo lista imena posjedovati a Popis od Niz vrijednosti.

U ovom primjeru koristimo ubrizgavanje polja za lista imena. Stoga smo stavili @Autowired bilješka.

Da biste saznali više o ubrizgavanju ovisnosti ili različitim načinima njegove primjene, pogledajte ovaj vodič.

Nakon toga registriramo CollectionsBean u klasi postavljanja konfiguracije:

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

Osim registracije CollectionsBean, također ubrizgavamo novi popis izričitom inicijalizacijom i vraćanjem kao zaseban @Grah konfiguracija.

Sada možemo testirati rezultate:

ApplicationContext context = new AnnotationConfigApplicationContext (CollectionConfig.class); CollectionsBean collectionBean = context.getBean (CollectionsBean.class); collectionBean.printNameList ();

Izlaz metode printNameList ():

[John, Adam, Harry]

3. Postavi S ubrizgavanjem konstruktora

Da postavimo isti primjer s Postavi kolekciju, izmijenimo CollectionsBean razred:

javna klasa CollectionsBean {private Set nameSet; javni CollectionsBean (Postavi nizove) {this.nameSet = stringovi; } javna praznina printNameSet () {System.out.println (nameSet); }}

Ovaj put želimo koristiti injekciju konstruktora za inicijalizaciju nameSet imovine. To zahtijeva i promjene u klasi konfiguracije:

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

4. Karta S Setter Injectionom

Slijedeći istu logiku, dodajmo i imeKarta polje za demonstraciju ubrizgavanja u kartu:

javni razred CollectionsBean {private map nameMap; @Autowired javna praznina setNameMap (Map nameMap) {this.nameMap = nameMap; } public void printNameMap () {System.out.println (nameMap); }}

Ovaj put imamo metodu postavljanja kako bismo koristili injekciju ovisnosti o postavljaču. Također moramo dodati Karta inicijalizacija koda u klasi konfiguracije:

@Bean public Map nameMap () {Map nameMap = new HashMap (); nameMap.put (1, "Ivan"); nameMap.put (2, "Adam"); nameMap.put (3, "Harry"); vrati imeKarta; }

Rezultati nakon poziva na printNameMap () metoda:

{1 = Ivan, 2 = Adam, 3 = Harry}

5. Ubrizgavanje referenci graha

Pogledajmo primjer gdje ubrizgavamo reference na grah kao elemente zbirke.

Prvo, izradimo grah:

javna klasa BaeldungBean {naziv privatnog niza; // konstruktor}

I dodajte a Popis od BaeldungBean kao svojstvo CollectionsBean razred:

javna klasa CollectionsBean {@Autowired (potrebno = netačno) privatni popis beanList; javna praznina printBeanList () {System.out.println (beanList); }}

Dalje, dodamo tvorničke metode Java konfiguracije za svaku BaeldungBean element:

@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"); } // ostale tvorničke metode}

Spremnik Spring ubrizgava pojedinačne zrnca BaeldungBean upišite u jednu zbirku.

Da bismo to testirali, pozivamo se na collectionBean.printBeanList () metoda. Izlaz prikazuje nazive graha kao elemente popisa:

[John, Harry, Adam]

Sada, razmotrimo scenarij kad ne postoji BaeldungBean. Ako nema a BaeldungBean registriran u kontekstu aplikacije, Spring će izbaciti iznimku jer nedostaje potrebna ovisnost.

Možemo koristiti @Autowired (potrebno = netačno) da se ovisnost označi kao neobavezna. Umjesto da izbaci iznimku, beanList neće se inicijalizirati, a vrijednost će ostati null.

Ako nam umjesto toga treba prazan popis null, možemo inicijalizirati beanList s novom ArrayList:

@Autowired (obavezno = netačno) privatni popis beanList = novi ArrayList ();

5.1. Koristeći @Narudžba razvrstati grah

Tijekom ubrizgavanja u kolekciju možemo odrediti redoslijed graha.

U tu svrhu koristimo @Narudžba napomena i navedite indeks:

@Configuration javna klasa 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"); }}

Proljetni spremnik prvo će ubrizgati grah s imenom "Harry", jer ima najnižu vrijednost narudžbe.

Tada će ubrizgati "Ivan", i na kraju, "Adam" grah:

[Harry, John, Adam]

Nauči više o @Narudžba u ovom vodiču.

5.2. Koristeći @Kvalifikator za odabir graha

Možemo koristiti @Kvalifikator za odabir graha za ubrizgavanje u određenu zbirku koja odgovara @Kvalifikator Ime.

Evo kako ga koristimo za mjesto ubrizgavanja:

@Autowired @Qualifier ("CollectionsBean") privatni popis beanList;

Zatim, označavamo istim @Kvalifikator grah koji želimo ubrizgati u Popis:

@Configuration javna klasa 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"); } // ostale tvorničke metode}

U ovom primjeru preciziramo da grah s imenom "Ivan" će se ubrizgati u Popis imenovan “CollectionsBean”. Rezultati koje ovdje testiramo:

ApplicationContext context = new AnnotationConfigApplicationContext (CollectionConfig.class); CollectionsBean collectionBean = context.getBean (CollectionsBean.class); collectionBean.printBeanList ();

Iz rezultata vidimo da naša kolekcija ima samo jedan element:

[Ivan]

6. Postavljanje praznog popisa kao zadane vrijednosti

Zadanu vrijednost za ubrizgano svojstvo Popisa možemo postaviti kao prazan popis pomoću Collections.emptyList () statička metoda:

javna klasa CollectionsBean {@Value ("$ {names.list:} # {T (java.util.Collections) .emptyList ()}") privatni popis nameListWithDefaultValue; javna praznina printNameListWithDefaults () {System.out.println (nameListWithDefaultValue); }}

Ako ovo pokrenemo s tipkom “names.list” koja nije inicijalizirana putem datoteke svojstava:

collectionBean.printNameListWithDefaults ();

Kao izlaz dobit ćemo prazan popis:

[ ]

7. Sažetak

Pomoću ovog vodiča naučili smo kako ubrizgati različite vrste Java kolekcija pomoću Spring okvira.

Također smo ispitali injekcije s referentnim vrstama i kako ih odabrati ili naručiti unutar zbirke.

Kao i obično, cjeloviti kôd dostupan je u projektu GitHub.