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.