위에서 설명한 것이 정확하게 와닿진 않지만 문법을 보면 아마 쉽게 이해가 될걸?
//결과 onePlusOne = 2
@Value("#{1 + 1}")
int onePlusOne;
//결과 helloWorld = "hello world"
@Value("#{hello + world}")
String helloWorld;
//결과 isOne = false
@Value("#{1 eq 5}")
boolean isOne;
//결과 directValue = "Directly insert string"
@Value("Directly insert string")
String directValue;
코드에서보는 것과 같이 표현식을 사용 할 수 있다.
그리고 재밌는 것은 스프링 빈에 접근하여 프로퍼티(필드)의 값을 가지고 올 수도 있는데
import org.springframework.stereotype.Component;
@Component
public class Sample {
private int value = 123;
public int getValue() {
return value;
}
}
@Value("#{sample.Value}")
int sampleValue;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(sampleValue);
}
스프링 빈의 id값을 참조해서 위와 같이 빈에 들어있는 프로퍼티 값을 가지고 올 수도 있다.
이 문법은 resource/application.properties에 들어있는 값을 가지고 오기 위해서 사용된다.
직관적으로 코드로 보자면,,,
@Value("${application.name}")
String appName;
//:뒤에 오는 값은 resource/application.properties에 application.name가 없을 경우 쓰게되는 기본값임
@Value("${application.name:Default Name}")
String userName;
대체로 서버별로 다른 설정값을 사용하고 싶을때 application.properties에 값만 바꿔줘서 사용하게 된다.