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.