Tömbök és listák injektálása a tavaszi tulajdonságfájlokból

1. Áttekintés

Ebben a gyors bemutatóban megtanuljuk, hogyan kell értékeket beinjektálni egy tömbbe vagy Lista egy Spring tulajdonságfájlból.

2. Alapértelmezett viselkedés

Kezdjük egy egyszerűvel alkalmazás.tulajdonságok fájl:

arrayOfStrings = Baeldung, pont, com

Lássuk, hogyan viselkedik a Spring, amikor a változó típusunkat beállítjuk Húr[]:

@Value ("$ {arrayOfStrings}") privát karakterlánc [] arrayOfStrings;
@Test void whenContextIsInitialized_thenInjectedArrayContainsExpectedValues ​​() {assertEquals (new String [] {"Baeldung", "dot", "com"}, arrayOfStrings); }

Láthatjuk, hogy Spring helyesen feltételezi, hogy határolónk vessző, és ennek megfelelően inicializálja a tömböt.

Azt is meg kell jegyeznünk, hogy alapértelmezés szerint egy tömb injektálása csak akkor működik helyesen, ha vesszővel elválasztott értékeink vannak.

3. Lista beadása

Ha megpróbáljuk beadni a Lista ugyanúgy meglepő eredményt kapunk:

@Value ("$ {arrayOfStrings}") privát lista váratlanListOfStrings;
@Test void whenContextIsInitialized_thenInjectedListContainsUnexpectedValues ​​() {assertEquals (Collections.singletonList ("Baeldung, dot, com"), váratlanListOfStrings); }

A mi Lista egyetlen elemet tartalmaz, amely megegyezik a tulajdonságfájlban beállított értékkel.

A megfelelő injekció beadása érdekében a Lista, egy speciális szintaxist kell használnunk Spring Expression Language (SpEL) néven:

@Value ("# {'$ {arrayOfStrings}'. Split (',')}") privát lista listOfStrings;
@Test void whenContextIsInitialized_thenInjectedListContainsExpectedValues ​​() {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStrings); }

Láthatjuk, hogy kifejezésünk ezzel kezdődik # a helyett $ amivel megszoktuk @Érték.

Azt is meg kell jegyeznünk, hogy a hasított módszer, amely egy kicsit bonyolultabbá teszi a kifejezést, mint egy szokásos injekció.

Ha egy kicsit egyszerűbbé akarjuk tenni a kifejezésünket, deklarálhatjuk tulajdonságunkat egy speciális formátumban:

listOfStrings = {'Baeldung', 'dot', 'com'}

Tavasz felismeri ezt a formátumot, és képesek leszünk injekciót adni Lista valamivel egyszerűbb kifejezést használva:

@Value ("# {$ {listOfStrings}}") privát lista listOfStringsV2;
@Test void whenContextIsInitialized_thenInjectedListV2ContainsExpectedValues ​​() {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStringsV2); }

4. Egyéni elválasztók használata

Hozzunk létre egy hasonló tulajdonságot, de ezúttal egy másik elválasztót fogunk használni:

listOfStringsWithCustomDelimiter = Baeldung; pont; com

Amint láttuk az injekció beadásakor Listák, használhatunk egy speciális kifejezést, ahol megadhatjuk a kívánt elválasztót:

@Value ("# {'$ {listOfStringsWithCustomDelimiter}'. Split (';')}") privát lista listOfStringsWithCustomDelimiter;
@Test void whenContextIsInitialized_thenInjectedListWithCustomDelimiterContainsExpectedValues ​​() {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStringsWithCustomDelimiter); }

5. Más típusok beadása

Vessünk egy pillantást a következő tulajdonságokra:

listOfBooleans = hamis, hamis, igaz listOfIntegers = 1,2,3,4 listOfCharacters = a, b, c

Láthatjuk, hogy a Spring az alaptípusokat már a dobozon kívül támogatja, ezért nincs szükségünk különösebb elemzésre:

@Value ("# {'$ {listOfBooleans}'. Split (',')}") privát lista listOfBooleans; @Value ("# {'$ {listOfIntegers}'. Split (',')}") privát lista listOfIntegers; @Value ("# {'$ {listOfCharacters}'. Split (',')}") privát lista 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); }

Ezt csak a SpEL-en keresztül támogatjuk, így nem tudunk ugyanúgy tömböt injektálni.

6. A Tulajdonságok programos elolvasása

Annak érdekében, hogy programozottan olvashassuk a tulajdonságokat, először meg kell szereznünk a példányunkat Környezet tárgy:

@Autowired magánkörnyezet;

Ezután egyszerűen használhatjuk a getProperty módszer bármely tulajdonság olvasására a kulcs és a várható típus megadásával:

@Test void whenReadingFromSpringEnvironment_thenPropertiesHaveExpectedValues ​​() {String [] arrayOfStrings = environment.getProperty ("arrayOfStrings", String []. Osztály); Lista listOfStrings = (Lista) environment.getProperty ("arrayOfStrings", Lista.osztály); assertEquals (új String [] {"Baeldung", "dot", "com"}, arrayOfStrings); assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStrings); }

7. Következtetés

Ebben a gyors bemutatóban megtanultuk a tömbök egyszerű injektálását és Listas gyors és praktikus példákon keresztül.

Mint mindig, a kód elérhető a GitHubon.


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