Vložte súbory a zoznamy zo súborov vlastností pružiny
1. Prehľad
V tomto rýchlom výučbe sa naučíme, ako vložiť hodnoty do poľa alebo Zoznam zo súboru vlastností Spring.
2. Predvolené správanie
Začneme jednoduchým application.properties spis:
arrayOfStrings = Baeldung, dot, com
Pozrime sa, ako sa chová jar, keď nastavíme typ našej premennej na Reťazec []:
@Value ("$ {arrayOfStrings}") private String [] arrayOfStrings;
@Test void whenContextIsInitialized_thenInjectedArrayContainsExectedValues () {assertEquals (nový reťazec [] {"Baeldung", "dot", "com"}, arrayOfStrings); }
Vidíme, že Spring správne predpokladá, že náš oddeľovač je čiarka a podľa toho inicializuje pole.
Mali by sme tiež poznamenať, že štandardne injektovanie poľa funguje správne, iba ak máme hodnoty oddelené čiarkou.
3. Vkladanie zoznamov
Ak sa pokúsime vpichnúť a Zoznam rovnakým spôsobom dosiahneme prekvapivý výsledok:
@Value ("$ {arrayOfStrings}") súkromný zoznam neočakávanýListOfStrings;
@Test void whenContextIsInitialized_thenInjectedListContainsUnexpectedValues () {assertEquals (Collections.singletonList ("Baeldung, dot, com"), unexpectedListOfStrings); }
Náš Zoznam obsahuje jeden prvok, ktorý sa rovná hodnote, ktorú sme nastavili v našom súbore vlastností.
Za účelom správneho podania a Zoznam, musíme použiť špeciálnu syntax nazvanú Spring Expression Language (SpEL):
@Value ("# {'$ {arrayOfStrings}'. Split (',')}") súkromný Zoznam listOfStrings;
@Test void whenContextIsInitialized_thenInjectedListContainsExectedValues () {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStrings); }
Vidíme, že náš výraz začína # namiesto $ na ktoré sme zvyknutí @Hodnota.
Mali by sme tiež poznamenať, že vyvolávame a rozdeliť metóda, vďaka ktorej je výraz o niečo zložitejší ako obvyklá injekcia.
Ak by sme chceli náš výraz trochu zjednodušiť, môžeme svoju vlastnosť deklarovať v špeciálnom formáte:
listOfStrings = {'Baeldung', 'dot', 'com'}
Jar tento formát rozpozná a my budeme môcť vložiť náš Zoznam pomocou trochu jednoduchšieho výrazu:
@Value ("# {$ {listOfStrings}}") súkromný Zoznam listOfStringsV2;
@Test void whenContextIsInitialized_thenInjectedListV2ContainsExectedValues () {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStringsV2); }
4. Používanie vlastných oddeľovačov
Vytvorme podobnú vlastnosť, ale tentokrát použijeme iný oddeľovač:
listOfStringsWithCustomDelimiter = Baeldung; dot; com
Ako sme videli pri injekcii Zoznamy, môžeme použiť špeciálny výraz, kde môžeme určiť požadovaný oddeľovač:
@Value ("# {'$ {listOfStringsWithCustomDelimiter}'. Split (';')}") súkromný Zoznam listOfStringsWithCustomDelimiter;
@Test void whenContextIsInitialized_thenInjectedListWithCustomDelimiterContainsExectedValues () {assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStringsWithCustomDelimiter); }
5. Vstrekovanie iných typov
Pozrime sa na tieto vlastnosti:
listOfBooleans = false, false, true listOfIntegers = 1,2,3,4 listOfCharacters = a, b, c
Vidíme, že Spring podporuje základné typy ihneď po vybalení, takže nemusíme robiť žiadnu špeciálnu analýzu:
@Value ("# {'$ {listOfBooleans}'. Split (',')}") súkromný Zoznam listOfBooleans; @Value ("# {'$ {listOfIntegers}'. Split (',')}") súkromný Zoznam listOfIntegers; @Value ("# {'$ {listOfCharacter}'. Split (',')}") súkromný Zoznam listOfCharacter;
@Test void whenContextIsInitialized_thenInjectedListOfBasicTypesContainsExectedValues () {assertEquals (Arrays.asList (false, false, true), listOfBooleans); assertEquals (Arrays.asList (1, 2, 3, 4), listOfIntegers); assertEquals (Arrays.asList ('a', 'b', 'c'), listOfCharacter); }
Toto je podporované iba prostredníctvom SpEL, takže nemôžeme injektovať pole rovnakým spôsobom.
6. Programové čítanie vlastností
Aby sme mohli programovo čítať vlastnosti, musíme najskôr získať inštanciu nášho Životné prostredie objekt:
@Autowired private Environment environment;
Potom môžeme jednoducho použiť getProperty metóda na čítanie ľubovoľnej vlastnosti zadaním jej kľúča a očakávaného typu:
@Test void whenReadingFromSpringEnvironment_thenPropertiesHaveExpectedValues () {String [] arrayOfStrings = environment.getProperty ("arrayOfStrings", String []. Trieda); Zoznam listOfStrings = (Zoznam) environment.getProperty ("arrayOfStrings", List.class); assertEquals (nový reťazec [] {"Baeldung", "dot", "com"}, arrayOfStrings); assertEquals (Arrays.asList ("Baeldung", "dot", "com"), listOfStrings); }
7. Záver
V tomto rýchlom výučbe sme sa naučili, ako ľahko vložiť polia a Zoznams prostredníctvom rýchlych a praktických príkladov.
Ako vždy, kód je k dispozícii na GitHub.