Stručný sprievodca k Spring @Value

1. Prehľad

V tomto rýchlom výučbe sa chystáme pozrieť sa na @Hodnota Jarná anotácia.

Túto anotáciu je možné použiť na vloženie hodnôt do polí v fazole spravovanej Springom a je možné ju použiť na úrovni poľa alebo parametra konštruktora / metódy.

2. Nastavenie aplikácie

Aby sme opísali rôzne druhy použitia tejto anotácie, musíme nakonfigurovať jednoduchú triedu konfigurácie aplikácií Spring.

Prirodzene, budeme potrebovať súbor vlastností definovať hodnoty, ktoré chceme vložiť do @Hodnota anotácia. Najprv teda budeme musieť definovať a @PropertySource v našej konfiguračnej triede - s názvom súboru vlastností.

Definujme súbor vlastností:

value.from.file = Hodnota získaná zo súboru priorita = vysoká listOfValues ​​= A, B, C

3. Príklady použitia

Ako základný a väčšinou zbytočný príklad môžeme vložiť „hodnotu reťazca“ iba z anotácie do poľa:

@Value ("hodnota reťazca") private String stringValue;

Pomocou @PropertySource anotácia nám umožňuje pracovať s hodnotami zo súborov vlastností s @Hodnota anotácia.

V nasledujúcom príklade dostaneme Hodnota pochádza zo súboru priradené k poľu:

@Value ("$ {value.from.file}") private String valueFromFile;

Hodnotu z vlastností systému môžeme nastaviť aj s rovnakou syntaxou.

Predpokladajme, že sme definovali systémovú vlastnosť s názvom systemValue:

@Value ("$ {systemValue}") private String systemValue;

Pre vlastnosti, ktoré nie je možné definovať, je možné poskytnúť predvolené hodnoty. Tu je hodnota nejaké predvolené vstrekne sa:

@Value ("$ {unknown.param: some default}") private String someDefault;

Ak je rovnaká vlastnosť definovaná ako systémová vlastnosť a v súbore vlastností, potom by sa použila systémová vlastnosť.

Predpokladajme, že sme mali nehnuteľnosť prioritou definované ako systémová vlastnosť s hodnotou Vlastnosť systému a definované v súbore vlastností ako niečo iné. Hodnota by bola Vlastnosť systému:

@Value ("$ {priorita}") private String prioritySystemProperty;

Niekedy musíme vložiť množstvo hodnôt. Bolo by vhodné definovať ich ako hodnoty oddelené čiarkou pre jednu vlastnosť v súbore vlastností alebo ako systémovú vlastnosť a vložiť ich do poľa.

V prvej časti sme definovali hodnoty oddelené čiarkou v listOfValues súboru vlastností, takže hodnoty poľa budú [„A“, „B“, „C“]:

@Value ("$ {listOfValues}") private String [] valuesArray;

4. Pokročilé príklady so SpEL

Na získanie hodnoty môžeme použiť aj výrazy SpEL.

Ak máme pomenovanú systémovú vlastnosť priorita, potom sa jeho hodnota použije na pole:

@Value ("# {systemProperties ['priority']}") private String spelValue;

Ak nemáme definované vlastnosti systému, potom nulový hodnota bude priradená.

Aby sme tomu zabránili, môžeme do výrazu SpEL poskytnúť predvolenú hodnotu. Dostaneme nejaké predvolené hodnota pre pole, ak nie je definovaná vlastnosť systému:

@Value ("# {systemProperties ['unknown']?: 'Some default'}") private String spelSomeDefault;

Ďalej môžeme použiť hodnotu poľa z iných fazúľ. Predpokladajme, že máme pomenovanú fazuľu someBean s poľom someValue rovná 10. Potom, 10 bude priradené k poľu:

@Value ("# {someBean.someValue}") súkromné ​​celé číslo someBeanValue;

S vlastnosťami môžeme manipulovať, aby sme dostali a Zoznam hodnôt, tu zoznam reťazcových hodnôt A, B a C:

@Value ("# {'$ {listOfValues}'. Split (',')}") súkromný Zoznam hodnôtList;

5. Používanie @Hodnota S Mapy

Môžeme tiež použiť @Hodnota anotácia na vloženie a Mapa nehnuteľnosť.

Najskôr budeme musieť definovať vlastnosť v {kľúč: ‘hodnota’} v našom súbore vlastností:

valuesMap = {key1: '1', key2: '2', key3: '3'}

Upozorňujeme, že hodnoty v Mapa musia byť v jednoduchých úvodzovkách.

Teraz môžeme vložiť túto hodnotu zo súboru vlastností ako a Mapa:

@Value ("# {$ {valuesMap}}") súkromná mapa valuesMap;

Ak potrebujeme získať hodnotu konkrétneho kľúča v Mapa, všetko, čo musíme urobiť, je pridajte do výrazu názov kľúča:

@Value ("# {$ {valuesMap} .key1}") súkromné ​​celé číslo valuesMapKey1;

Ak si nie sme istí, či Mapa obsahuje určitý kľúč, mali by sme si zvoliť bezpečnejší výraz, ktorý nevyvolá výnimku, ale nastaví hodnotu na nulový keď sa kľúč nenájde:

@Value ("# {$ {valuesMap} ['unknownKey']}")) súkromné ​​celé číslo unknownMapKey;

Môžeme tiež nastavte predvolené hodnoty pre vlastnosti alebo kľúče, ktoré nemusia existovať:

@Value ("# {$ {unknownMap: {key1: '1', key2: '2'}}}") súkromná mapa unknownMap; @Value ("# {$ {valuesMap} ['unknownKey']?: 5}") súkromné ​​celé číslo unknownMapKeyWithDefaultValue;

Mapa položky je možné filtrovať pred injekciou.

Predpokladajme, že musíme dostať iba tie záznamy, ktorých hodnoty sú väčšie ako jedna:

@Value ("# {$ {valuesMap}.? [Hodnota> '1']}" ") súkromná mapa valuesMapFiltered;

Môžeme tiež použiť @Hodnota anotácia k vložiť všetky súčasné vlastnosti systému:

@Value ("# {systemProperties}") súkromná mapa systemPropertiesMap;

6. Používanie @Hodnota S injektorom Constructor

Keď použijeme @Hodnota anotácie, neobmedzujeme sa iba na injekciu do poľa. Môžeme ho použiť aj spolu s injektorom konštruktora.

Pozrime sa na to v praxi:

@Component @PropertySource ("classpath: values.properties") verejná trieda PriorityProvider {súkromná priorita reťazca; @Autowired public PriorityProvider (@Value ("$ {priority: normal}") Reťazcová priorita) {this.priority = priorita; } // štandardný getter}

Vo vyššie uvedenom príklade injikujeme a prioritou priamo do našej Poskytovateľ priorityKonštruktor.

Upozorňujeme, že predvolenú hodnotu poskytujeme aj v prípade, že sa vlastnosť nenájde.

7. Používanie @Hodnota S injekčným setrom

Analogicky k injektáži konštruktéra, môžeme tiež použiť @Hodnota so vstrekovaním setra.

Pozrime sa:

@Component @PropertySource ("classpath: values.properties") verejná trieda CollectionProvider {súkromné ​​hodnoty zoznamu = nový ArrayList (); @Autowired public void setValues ​​(@Value ("# {'$ {listOfValues}'. Split (',')}") Zoznam hodnôt) {this.values.addAll (hodnoty); } // štandardný getter}

Pomocou výrazu SpEL vložíme zoznam hodnôt do súboru setValues metóda.

8. Záver

V tomto článku sme skúmali rôzne možnosti použitia @Hodnota anotácia s jednoduchými vlastnosťami definovanými v súbore, s vlastnosťami systému a s vlastnosťami vypočítanými pomocou výrazov SpEL.

Vzorová aplikácia je ako vždy k dispozícii v projekte GitHub.