@Value – adnotacja umożliwiająca wstrzykiwanie wartości. Umożliwia również przekazywanie wartości domyślnych.
Z wykorzystaniem adnotacji @Value można wyczytywać wartości zapisane w pliku konfiguracyjnym. Domyślny plik konfiguracyjny dla SpringBoot jest automatycznie tworzony i nazywa się application.properties.
Podstawowe wczytywanie wartości
Plik konfiguracyjny przyjmuje konstrukcje:
klucz1=wartość1
klucz2=wartość2
Po kluczu programista odwołuje się do wartości jaką umieścił w pliku konfiguracyjnym.
Przykładowo plik application.properties może mieć następujące wpisy:
myConfigReader.exampleString=hello! myConfigReader.exampleNumber=4 myConfigReader.exampleTrueOrFalse=true
Nie ma znaczenia jaką budowę będzie miał klucz. Lecz dobrą praktyką jest napisanie go małymi literami. Pierwszy człon powinien być nazwą klasy + kropka + nazwa zmiennej do której będzie wczytywana wartość.
W tym przykładzie nazwą dla kasy jest myConfigReader a dla pola exampleString
myConfigReader.exampleString
Aby zaczytać konfiguracje do pola klasy wystarczy posłużyć się adnotacją @Value. @Value przyjmuje w parametrze „${klucz.do.przyjmowanej.wartości}”.
Umieszczenie tej adnotacji nad polem spowoduje wstrzyknięcie wartości do zmiennej.
@RestController
public class MyConfigReader {
@Value("${myConfigReader.exampleString}")
public String exampleString;
@Value("${myConfigReader.exampleNumber}")
public int exampleNumber;
@Value("${myConfigReader.exampleTrueOrFalse}")
public boolean exampleTrueOrFalse;
@RequestMapping("/checkConfig")
public String checkConfig() {
return "String from config: " + exampleString +
" Number from config: " + exampleNumber +
" Boolean from config: " + exampleTrueOrFalse;
}
}
Zaletą mechanizmu wstrzykiwania wartości jest automatyczne konwertowanie wartości. Programista nie musi ręcznie dokonywać rzutowania lecz mechanizm Spring Boot dokonuje tego w sposób automatyczny. Rezultat przekładu widoczny poniżej:

Przekazywanie wartości domyślnych
Dopuszczalne jest definiowanie wartości domyślnych. Oznacza, to, że jeśli kontekst Spring nie znajdzie w pliku konfiguracyjnym zdefiniowanej zmiennej, to do pola wstrzyknie wartość domyślną. Wartość domyślną definiuje się wewnątrz adnotacji @Value po dwukropku – tak jak widać to na przykładzie poniższym. W przypadku ciągu tekstowego nie umieszcza się go dodatkowo w cudzysłowie.
@Value("${myConfigReader.noExistingString:undefined value}")
private String undefinedString;
@Value("${myConfigReader.noExistingInt:0}")
private int undefinedNumber;
@RequestMapping("/checkConfig2")
public String checkConfig2() {
return undefinedString + " AND " + undefinedNumber;
}

Przekazywanie kolekcji
Aby wczytać dane to tablicy wystarczy w pliku konfiguracyjnym do zmiennej przypisać wartości oddzielone przecinkami:
myConfigReader.array=S,P,R,I,N,G
W kodzie programu postępujemy zgodnie z ogólnymi zasadami.
@Value("${myConfigReader.array}")
private String[] exampleArray;
@RequestMapping("/checkConfig3")
public String checkConfig3() {
return Arrays.toString(exampleArray);
}

Sprawa komplikuje się w przypadku umieszczenia danych w liście. Postępując standardowo do listy zostanie przypisany tylko jeden element. Rozwiązaniem jest wykorzystanie Spring Expression Language (SpEL).
@Value("#{'${myConfigReader.array}'.split(',')}")
private List<String> exampleList;
@RequestMapping("/checkConfig4")
public String checkConfig4() {
return exampleList.toString();
}
Zastosowanie SpEL i metody split można osiągnąć efekt, że każdemu elementowi oddzielonemu przecinkiem zostanie przypisany oddzielny indeks w liście

Wnioski
Z wykorzystaniem adnotacji @Value można wstrzykiwać wartości do pól. Przekazywać można tak obiekty, typy proste, tablice czy listy. @Autowired w przeciwieństwie do @Value pozwala tylko na wstrzykiwanie obiektów zarządzanych przed Contexts and Dependency Injection.
W kolejnej części opisany zostanie sposób automatycznego wczytywania konfiguracji do klasy.
Szkolenia live dla developerów • praktyczna wiedza, realne case’y, zero lania wody 
