@Value
- 속성 파일(ex: application.yml)에 정의된 값을 사용할 수 있는 어노테이션
application.yml
value.from.file=Value got from the file
priority=high
listOfValues=A,B,C
필드에 할당된 값을 이용하여 값 얻기
기본 값 얻기
@Value("${value.from.file:some default}")
private String valueFromFile; // Value got from the file
- application.yml에 정의한 value.from.file 값을 valueFromFile 변수에 할당
- 만약 value.from.file 값이 정의되어 있지 않다면 some default가 변수에 할당
배열 값 얻기
@Value("${listOfValues}")
private String[] valueArray; // A,B,C 값을 ,로 구분하여 배열에 할당
- application.yml에 정의한 listOfValues 의 값을 ,로 구분하여 valueArray 변수에 할당
SpEL을 사용한 예제
시스템 속성
@Value("#{systemProperties['priority'] ?: 'some default'}")
private String spelValue;
- 시스템 속성을 정의하지 않은 경우 'some default' 값이 spelValue 변수에 할당
속성을 조작하여 값 얻기
@Value("#{'${listOfValues}'.split(',')}")
private List<String> valuesList; // A,B,C를 ,로 구분하여 valuesList에 할당
Map 속성으로 @Value 사용하기
valuesMape={key1: '1', key2:'2', key3: '3'}
@Value("#{${valuesMap}}")
private Map<String, Integer> valuesMap;
특정 키 값 얻기
@Value("#{${valuesMap}.key1}")
private Integer valuesMapKey1;
필터링
@Value("#{${valuesMap}.?[value>'1']}")
private Map<String, Integer> valuesMapFiltered;
모든 현재 시스템 속성 주입
@Value("#{systemProperties}")
private Map<String, String> systemPropertiesMap;
생성자 주입
@Component
@PropertySource("classpath:values.properties")
public class PriorityProvider{
private String priority;
@Autowired
public PriorityProvider(@Value("${priority:normal}") String priority){
this.priority = priority;
}
}
Setter 주입
@Component
@PrioritySource("classpath:values.properties")
public class CollectionProvider{
private List<String> values = new ArrayList<>();
@Autowired
public void setValues(@Value("#{'${listOfValues}'.split(',')}") List<String> values){
this.values.addAll(values);
}
}