@Value

배세훈·2021년 12월 14일
0

Spring

목록 보기
27/38

@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 사용하기

  • application.yml
valuesMape={key1: '1', key2:'2', key3: '3'}
  • Map의 값은 작은따옴표로 묶어야 합니다.
@Value("#{${valuesMap}}")
private Map<String, Integer> valuesMap;

특정 키 값 얻기

@Value("#{${valuesMap}.key1}")
private Integer valuesMapKey1;

필터링

  • 값이 1보다 큰 항목만 가져오기
@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);
    }
}
profile
성장형 인간

0개의 댓글