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.