Rövid útmutató a @Value tavaszhoz

1. Áttekintés

Ebben a gyors bemutatóban fogunk vessen egy pillantást a @Érték Tavaszi kommentár.

Ez az annotáció használható értékek injektálására a tavaszi kezelt bab mezőkbe, és alkalmazható mező vagy konstruktor / módszer paraméter szintjén.

2. Az alkalmazás beállítása

Ennek a jegyzetnek a különféle felhasználási módjainak leírásához konfigurálnunk kell egy egyszerű Spring alkalmazás konfigurációs osztályt.

Természetesen, szükségünk lesz egy tulajdonságfájlra meghatározni azokat az értékeket, amelyeket a @Érték annotáció. Ezért először meg kell határoznunk a @PropertySource konfigurációs osztályunkban - a tulajdonságfájl nevével.

Határozzuk meg a tulajdonságfájlt:

value.from.file = Az érték a prioritás = high listOfValues ​​= A, B, C fájlból származik

3. Felhasználási példák

Alapvető és többnyire haszontalan példaként csak a karakterláncot tudjuk beírni a megjegyzésből a mezőbe:

@Value ("string value") privát String stringValue;

Használni a @PropertySource kommentár lehetővé teszi számunkra, hogy a tulajdonságfájlok értékeivel dolgozzunk a @Érték annotáció.

A következő példában azt kapjuk Az érték a fájlból származik a mezőhöz rendelt:

@Value ("$ {value.from.file}") privát String valueFromFile;

Az értéket a rendszer tulajdonságaiból is megadhatjuk ugyanazzal a szintaxissal.

Tegyük fel, hogy definiáltunk egy rendszer tulajdonságot systemValue:

@Value ("$ {systemValue}") privát String systemValue;

Alapértelmezett értékeket lehet megadni azokhoz a tulajdonságokhoz, amelyek esetleg nincsenek meghatározva. Itt az érték néhány alapértelmezett beadják:

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

Ha ugyanazt a tulajdonságot rendszer tulajdonságként és a tulajdonságok fájlban definiálják, akkor a rendszer tulajdonság kerül alkalmazásra.

Tegyük fel, hogy volt ingatlanunk kiemelten fontos értékkel rendelkező rendszer tulajdonságként definiálva Rendszer tulajdonság és valami másként határozta meg a tulajdonságfájlban. Az érték az lenne Rendszer tulajdonság:

@Value ("$ {priority}") privát karakterlánc prioritásSystemProperty;

Néha egy csomó értéket kell beadnunk. Kényelmes lenne ezeket a tulajdonságfájlban az egyes tulajdonságok vesszővel elválasztott értékeként vagy rendszer tulajdonságként definiálni, és beinjekciózni egy tömbbe.

Az első szakaszban vesszővel elválasztott értékeket definiáltunk a listOfValues tulajdonságfájl, tehát a tömb értékei lennének [„A”, „B”, „C”]:

@Value ("$ {listOfValues}") privát karakterlánc [] valuesArray;

4. Haladó példák a SpEL-lel

Használhatunk SpEL kifejezéseket is az érték megszerzéséhez.

Ha van egy megnevezett rendszer tulajdonságunk kiemelten fontos, akkor az értéke a mezőre lesz alkalmazva:

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

Ha nem definiáltuk a rendszer tulajdonságát, akkor a nulla érték lesz hozzárendelve.

Ennek megakadályozása érdekében megadhatunk egy alapértelmezett értéket a SpEL kifejezésben. Kapunk néhány alapértelmezett a mező értéke, ha a rendszer tulajdonság nincs meghatározva:

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

Ezenkívül használhatunk más babból származó mezőértéket is. Tegyük fel, hogy van egy babunk someBean mezővel someValue egyenlő 10. Azután, 10 a mezőhöz lesz rendelve:

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

A tulajdonságokat manipulálhatjuk a Lista értékek, itt az A, B és C karakterláncok listája:

@Value ("# {'$ {listOfValues}'. Split (',')}") privát Lista értékekLista;

5. Használata @Érték Val vel Térképek

Használhatjuk a @Érték injekció beadása a Térkép ingatlan.

Először meg kell határoznunk a tulajdonságot a {kulcs érték' } űrlap a tulajdonságfájlunkban:

valuesMap = {kulcs1: '1', kulcs2: '2', kulcs3: '3'}

Vegye figyelembe, hogy a Térkép egyetlen idézőjelben kell szerepelnie.

Ezt az értéket a tulajdonságfájlból a-ként adhatjuk be Térkép:

@Value ("# {$ {valuesMap}}") privát Map valuesMap;

Ha szükségünk van rá hogy megkapja egy adott kulcs értékét ban,-ben Térkép, csak annyit kell tennünk adja hozzá a kulcs nevét a kifejezéshez:

@Value ("# {$ {valuesMap} .key1}") private Integer értékekMapKey1;

Ha nem vagyunk biztosak abban, hogy a Térkép tartalmaz egy bizonyos kulcsot, akkor választanunk kell biztonságosabb kifejezés, amely nem vet ki kivételt, de az értékre állítja nulla ha a kulcs nem található:

@Value ("# {$ {valuesMap} ['unknownKey']}") private Integer unknownMapKey;

Azt is megtehetjük állítson be alapértelmezett értékeket azokhoz a tulajdonságokhoz vagy kulcsokhoz, amelyek esetleg nem léteznek:

@Value ("# {$ {unknownMap: {key1: '1', key2: '2'}}}}) privát Map unknownMap; @Value ("# {$ {valuesMap} ['unknownKey']?: 5}") private Integer unknownMapKeyWithDefaultValue;

Térkép a bejegyzések is szűrhetők az injekció beadása előtt.

Tegyük fel, hogy csak azokat a bejegyzéseket kell megszereznünk, amelyek értéke nagyobb, mint egy:

@Value ("# {$ {valuesMap}.? [Érték> '1']}" ") privát Térkép értékekMapFiltered;

Használhatjuk a @Érték annotáció a beadja az összes jelenlegi rendszer tulajdonságot:

@Value ("# {systemProperties}") privát Map systemPropertiesMap;

6. Használata @Érték Konstruktor befecskendezésével

Amikor használjuk a @Érték megjegyzés, nem korlátozódunk a terepi injekcióra. Kivitelezői befecskendezéssel együtt is használhatjuk.

Lássuk ezt a gyakorlatban:

@Component @PropertySource ("classpath: values.properties") public class PriorityProvider {private String prioritás; @Autowired public PriorityProvider (@Value ("$ {prioritás: normál}") String prioritás) {this.priority = prioritás; } // standard getter}

A fenti példában a kiemelten fontos közvetlenül a mi PriorityProvider’S kivitelezője.

Vegye figyelembe, hogy alapértelmezett értéket is megadunk, ha a tulajdonság nem található.

7. Használata @Érték Szetter injekcióval

A konstruktor befecskendezéséhez hasonlóan használhatjuk is @Érték szetter injekcióval.

Lássuk:

@Component @PropertySource ("classpath: values.properties") public class CollectionProvider {private List values ​​= new ArrayList (); @Autowired public void setValues ​​(@Value ("# {'$ {listOfValues}'. Split (',')}") Listaértékek) {this.values.addAll (értékek); } // standard getter}

A SpEL kifejezéssel az értékek listáját injektáljuk a setValues módszer.

8. Következtetés

Ebben a cikkben megvizsgáltuk a @Érték annotáció a fájlban definiált egyszerű tulajdonságokkal, rendszer tulajdonságokkal és SpEL kifejezésekkel kiszámított tulajdonságokkal.

Mint mindig, a példaalkalmazás elérhető a GitHub projekten.