[springboot] @autowired 안에서 @value로 호출한 값 못 읽을때

Service를 하나 만들었고, Service 생성자 안에서 값을 초기화 해주는 로직을 만들고 있었다. 

각각 환경마다 다르게 셋팅해야하는 값이라 application.properties에 값을 넣어주고 불러와서 사용하고 있어다 .

예제를 보자면 이런식


@Value("{test.title}")
String title;

private OtherService otherService;

public WebService(OtherService otherService) {
this.otherService = otherService;
if (title.equals("dev")) {
System.out.println("dev setting");
} else {
System.out.println("other setting");
}
}

@Value annotation을 이용하여 값을 받아오는데 실행해보면 NPE오류가 발생한다.

확인해보니 순서가 injection을 모두 마친후에 @Value 불러오기 떄문이였다. 


그럴 경우 @PostConstruct 어노테이션을 이용하여 따로 처리해주도록 변경하면 된다.

아래와 같이 변경

@Service
public class WebService {
@Value("{test.title}")
String title;

private OtherService otherService;

public WebService(OtherService otherService) {
this.otherService = otherService;
}

@PostConstruct
public void init() {
if (title.equals("dev")) {
System.out.println("dev setting");
} else {
System.out.println("other setting");
}
}
}