Ubrizgajte nizove i popise iz datoteka svojstava opruge
1. Pregled
U ovom brzom vodiču naučit ćemo kako ubrizgati vrijednosti u niz ili Popis iz datoteke svojstava Spring.
2. Zadano ponašanje
Krenut ćemo s jednostavnim primjena.svojstva datoteka:
arrayOfStrings = Baeldung, točka, kom
Pogledajmo kako se Spring ponaša kad svoj tip varijable postavimo na Niz[]:
@Value ("$ {arrayOfStrings}") private String [] arrayOfStrings;
@Test void whenContextIsInitialized_thenInjectedArrayContainsExpectedValues () {assertEquals (new String [] {"Baeldung", "dot", "com"}, arrayOfStrings); }
Vidimo da Spring ispravno pretpostavlja da je naš graničnik zarez i u skladu s tim inicijalizira niz.
Također bismo trebali napomenuti da, prema zadanim postavkama, ubrizgavanje niza ispravno djeluje samo kada imamo vrijednosti odvojene zarezom.
3. Popisi ubrizgavanja
Ako pokušamo ubrizgati a Popis na isti ćemo način dobiti iznenađujući rezultat:
@Value ("$ {arrayOfStrings}") privatni popis neočekivaniListOfStrings;
@Test void whenContextIsInitialized_thenInjectedListContainsUnexpectedValues () {assertEquals (Collections.singletonList ("Baeldung, dot, com"), greatestListOfStrings); }
Naše Popis sadrži jedan element koji je jednak vrijednosti koju smo postavili u datoteci svojstava.
Kako bi se pravilno ubrizgalo a Popis, trebamo koristiti posebnu sintaksu nazvanu Spring Expression Language (SpEL):
@Value ("# {'$ {arrayOfStrings}'. Split (',')}") privatni popis listOfStrings;
@Test void whenContextIsInitialized_thenInjectedListContainsExpectedValues () {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStrings); }
Vidimo da naš izraz započinje s # umjesto $ na koje smo navikli @Vrijednost.
Također bismo trebali primijetiti da pozivamo a podjela metoda koja izraz čini malo složenijim od uobičajene injekcije.
Ako svoj izraz želimo učiniti jednostavnijim, svoje vlasništvo možemo prijaviti u posebnom formatu:
listOfStrings = {'Baeldung', 'točka', 'com'}
Proljeće će prepoznati ovaj format, a mi ćemo moći ubrizgati svoj Popis koristeći nešto jednostavniji izraz:
@Value ("# {$ {listOfStrings}}") private List listOfStringsV2;
@Test void whenContextIsInitialized_thenInjectedListV2ContainsExpectedValues () {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStringsV2); }
4. Korištenje prilagođenih graničnika
Stvorimo slično svojstvo, ali ovaj put ćemo upotrijebiti drugi graničnik:
listOfStringsWithCustomDelimiter = Baeldung; točka; com
Kao što smo vidjeli prilikom ubrizgavanja Popisi, možemo upotrijebiti poseban izraz u kojem možemo odrediti željeni graničnik:
@Value ("# {'$ {listOfStringsWithCustomDelimiter}'. Split (';')}") privatni popis listOfStringsWithCustomDelimiter;
@Test void whenContextIsInitialized_thenInjectedListWithCustomDelimiterContainsExpectedValues () {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStringsWithCustomDelimiter); }
5. Ubrizgavanje drugih vrsta
Pogledajmo sljedeća svojstva:
listOfBooleans = false, false, true listOfIntegers = 1,2,3,4 listOfCharacters = a, b, c
Vidimo da Spring podržava osnovne tipove izravno iz kutije, pa ne moramo posebno raščlanjivati:
@Value ("# {'$ {listOfBooleans}'. Split (',')}") privatni popis listOfBooleans; @Value ("# {'$ {listOfIntegers}'. Split (',')}") privatni popis listOfIntegers; @Value ("# {'$ {listOfCharacters}'. Split (',')}") privatni popis listOfCharacters;
@Test void whenContextIsInitialized_thenInjectedListOfBasicTypesContainsExpectedValues () {assertEquals (Arrays.asList (false, false, true), listOfBooleans); assertEquals (Arrays.asList (1, 2, 3, 4), listOfIntegers); assertEquals (Arrays.asList ('a', 'b', 'c'), listOfCharacters); }
To je podržano samo putem SpEL-a, tako da ne možemo ubrizgati niz na isti način.
6. Programsko čitanje svojstava
Da bismo programski čitali svojstva, prvo moramo dobiti instancu našeg Okoliš objekt:
@Autowired privatno okruženje okoliša;
Tada jednostavno možemo koristiti getProperty metoda za čitanje bilo kojeg svojstva navodeći njegov ključ i očekivani tip:
@Test void whenReadingFromSpringEnvironment_thenPropertiesHaveExpectedValues () {String [] arrayOfStrings = environment.getProperty ("arrayOfStrings", String []. Class); List listOfStrings = (List) environment.getProperty ("arrayOfStrings", List.class); assertEquals (novi String [] {"Baeldung", "dot", "com"}, arrayOfStrings); assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStrings); }
7. Zaključak
U ovom smo brzom vodiču naučili kako lako ubrizgati nizove i Popiskroz brze i praktične primjere.
Kao i uvijek, kôd je dostupan na GitHub-u.