본문 바로가기

PROGRAMMING/SPRING

[SPRING] static field에 @Value annotation 적용?

문제

api key 변수를 yml 파일에 넣고 @Value 어노테이션으로 끌어다 쓰고 싶어 코드를 수정

 

변경 전

 private static String AUTH_TOKEN = "access_token";

 

변경 후

    @Value("${api-key.key}")
    private static String AUTH_TOKEN;

 

하지만 실제 구동 시켜 api호출을 하면 

Cannot invoke "String.length()" because "s" is null%

요런 에러가 발생

 

원인

static 필드는 스프링 컨테이너가 로드 되기 전에 class area에 저장이 되기 때문에,

스프링 컨테이너에 의존적인 @Value 어노테이션이 정상적으로 작동하지 않는다.

 

해결 방법 

static 필드에 직접 @Value 어노테이션 선언을 하지 말고

setter 메서드를 생성, @Value를 조합하면 정상적으로 값을 끌어올 수 있다.

 

최종 수정 코드

    private static String AUTH_TOKEN;

    @Value("${api-key.key}")
    public void setKey(String value) {
        AUTH_TOKEN = value;
    }