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.


$config[zx-auto] not found$config[zx-overlay] not found