@Value Spring annotation
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Arrays;
@Service
public class MyService {
@Value("string value")
private String stringValue;
@Value("${value.from.file}")
private String valueFromFile;
@Value("${systemValue}")
private String systemValue;
@Value("${unknown. param: some default}")
private String someDefault;
@Value("${priority}")
private String prioritySystemProperty;
@Value("${listOfValues}")
private String[] valuesArray;
@PostConstruct
private void postConstruct() {
System.out.println(stringValue); // string value
System.out.println(valueFromFile); // Value got from the file
System.out.println(systemValue); // systemValue
System.out.println(someDefault); //some default
System.out.println(prioritySystemProperty); // high
Arrays.stream(valuesArray).forEach(System.out::println); // A B C
}
}
Эту аннотацию можно использовать для ввода значений в поля в bean-компонентах, управляемых Spring, и ее можно применять на уровне поля или параметра конструктора/метода.
Заполним наш application.properties файл:
value.from.file=Value got from the file
priority=high
listOfValues=A,B,C
Первый и самый бесполезный вариант использования это указать просто строку в аннотации @Value, эта строка и установится как значение аннотируемого члена класса.
Используя конструкцию ${propname} в аннотации, можно получить значение из конфигурационного файла приложения или переменной окружения.
Если значения может не быть, то можно определить значение по умолчанию ${unknown.param:some default}, если этого не сделать, то получим ошибку:
java.lang.IllegalArgumentException: Could not resolve placeholder 'unknown.param' in value "${unknown.param}"