Kratki vodič za Spring @Value

1. Pregled

U ovom brzom uputstvu idemo pogledajte @Vrijednost Proljetna bilješka.

Ova se napomena može koristiti za ubrizgavanje vrijednosti u polja u grahu kojim upravlja Spring, a može se primijeniti na razini polja ili parametra konstruktora / metode.

2. Postavljanje aplikacije

Da bismo opisali različite vrste upotrebe za ovu napomenu, moramo konfigurirati jednostavnu klasu konfiguracije aplikacije Spring.

Prirodno, trebat će nam datoteka svojstava kako bismo definirali vrijednosti koje želimo ubrizgati u @Vrijednost bilješka. Dakle, prvo ćemo morati definirati a @PropertySource u našoj konfiguracijskoj klasi - s imenom datoteke svojstava.

Definirajmo datoteku svojstava:

value.from.file = Vrijednost dobivena iz datoteke s prioritetom = high listOfValues ​​= A, B, C

3. Primjeri korištenja

Kao osnovni i uglavnom beskorisni primjer, iz bilješke u polje možemo ubaciti samo "vrijednost vrijednosti":

@Value ("string value") private String stringValue;

Koristiti @PropertySource anotacija omogućuje nam rad s vrijednostima iz datoteka svojstava pomoću @Vrijednost bilješka.

U sljedećem primjeru dobivamo Vrijednost dobivena iz datoteke dodijeljeno polju:

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

Također možemo postaviti vrijednost iz svojstava sustava s istom sintaksom.

Pretpostavimo da smo definirali svojstvo sustava s imenom systemValue:

@Value ("$ {systemValue}") privatni niz systemValue;

Zadane vrijednosti mogu se navesti za svojstva koja možda nisu definirana. Evo, vrijednost neki zadani ubrizgati će se:

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

Ako je isto svojstvo definirano kao svojstvo sustava i u datoteci svojstava, tada bi se primijenilo svojstvo sustava.

Pretpostavimo da smo imali posjed prioritet definirano kao svojstvo sustava s vrijednošću Svojstvo sustava i definirano kao nešto drugo u datoteci svojstava. Vrijednost bi bila Svojstvo sustava:

@Value ("$ {prioritet}") privatni niz prioritetSystemProperty;

Ponekad trebamo ubaciti hrpu vrijednosti. Bilo bi prikladno definirati ih kao vrijednosti odvojene zarezom za pojedinačno svojstvo u datoteci svojstava ili kao svojstvo sustava i ubrizgati u niz.

U prvom smo odjeljku definirali vrijednosti odvojene zarezima u listOfValues datoteke svojstava, pa bi vrijednosti niza bile [„A“, „B“, „C“]:

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

4. Napredni primjeri s SpEL-om

Također možemo koristiti SpEL izraze da bismo dobili vrijednost.

Ako imamo svojstvo sustava s imenom prioritet, tada će se njegova vrijednost primijeniti na polje:

@Value ("# {systemProperties ['prioritet']}") privatni niz spelValue;

Ako nismo definirali svojstvo sustava, tada null dodijelit će se vrijednost.

Da bismo to spriječili, možemo pružiti zadanu vrijednost u izrazu SpEL. Dobivamo neki zadani vrijednost za polje ako sistemsko svojstvo nije definirano:

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

Nadalje, možemo koristiti vrijednost polja iz drugih graha. Pretpostavimo da imamo grah s imenom nekiBean s poljem neka vrijednost jednak 10. Zatim, 10 bit će dodijeljeno polju:

@Value ("# {someBean.someValue}") private Integer someBeanValue;

Možemo manipulirati svojstvima da bismo dobili a Popis vrijednosti, ovdje je popis vrijednosti niza A, B i C:

@Value ("# {'$ {listOfValues}'. Split (',')}") private List valuesList;

5. Korištenje @Vrijednost S Karte

Također možemo koristiti @Vrijednost napomena za ubrizgavanje a Karta imovine.

Prvo ćemo morati definirati svojstvo u {ključ: 'vrijednost'} obrazac u našoj datoteci svojstava:

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

Imajte na umu da vrijednosti u Karta moraju biti u jednostrukim navodnicima.

Sada možemo unijeti ovu vrijednost iz datoteke svojstava kao Karta:

@Value ("# {$ {valuesMap}}") private Map valuesMap;

Ako trebamo da biste dobili vrijednost određenog ključa u Karta, sve što moramo učiniti je dodajte ime ključa u izraz:

@Value ("# {$ {valuesMap} .key1}") private Integer valuesMapKey1;

Ako nismo sigurni je li Karta sadrži određeni ključ, trebali bismo odabrati sigurniji izraz koji neće stvoriti iznimku već će vrijednost postaviti na null kada ključ nije pronađen:

@Value ("# {$ {valuesMap} ['unknownKey']}" ") privatni cijeli broj unknownMapKey;

Možemo i mi postavite zadane vrijednosti za svojstva ili ključeve koji možda ne postoje:

@Value ("# {$ {unknownMap: {key1: '1', key2: '2'}}}")) privatna karta unknownMap; @Value ("# {$ {valuesMap} ['unknownKey']?: 5}") privatni cijeli broj unknownMapKeyWithDefaultValue;

Karta unosi se također mogu filtrirati prije injekcije.

Pretpostavimo da trebamo dobiti samo one unose čije su vrijednosti veće od jedne:

@Value ("# {$ {valuesMap}.? [Value> '1']}") private Map valuesMapFiltered;

Također možemo koristiti @Vrijednost bilješka na ubrizgati sva trenutna svojstva sustava:

@Value ("# {systemProperties}") privatna karta systemPropertiesMap;

6. Korištenje @Vrijednost S ubrizgavanjem konstruktora

Kada koristimo @Vrijednost napomena, nismo ograničeni na ubrizgavanje polja. Također ga možemo koristiti zajedno s ubrizgavanjem konstruktora.

Pogledajmo ovo u praksi:

@Component @PropertySource ("classpath: values.properties") javna klasa PriorityProvider {prioritet privatnog niza; @Autowired javni prioritetni dobavljač (@Value ("$ {prioritet: normalno}") Prioritet niza) {this.priority = prioritet; } // standardni getter}

U gornji primjer ubrizgavamo a prioritet izravno u naš PriorityProvider'S konstruktor.

Imajte na umu da pružamo i zadanu vrijednost u slučaju da svojstvo nije pronađeno.

7. Korištenje @Vrijednost S Setter Injectionom

Analogno ubrizgavanju u konstruktor, također možemo koristiti @Vrijednost s injekcijom setera.

Pogledajmo:

@Component @PropertySource ("classpath: values.properties") javna klasa CollectionProvider {vrijednosti privatnog popisa = novi ArrayList (); @Autowired javna void setValues ​​(@Value ("# {'$ {listOfValues}'. Split (',')}") Vrijednosti popisa) {this.values.addAll (vrijednosti); } // standardni getter}

Izraz SpEL koristimo za ubrizgavanje popisa vrijednosti u setValues metoda.

8. Zaključak

U ovom smo članku ispitali različite mogućnosti korištenja @Vrijednost napomena s jednostavnim svojstvima definiranim u datoteci, sa svojstvima sustava i sa svojstvima izračunatim SpEL izrazima.

Kao i uvijek, primjer aplikacije dostupan je na projektu GitHub.