본문 바로가기
Develop/Spring

@Value 애너테이션으로 값을 불러올 때, 항상 null 값이 오는 경우

by jaeyoungb 2023. 1. 10.

app-key와 app-secret을 application.properties 파일에 key, value 형태로 담아둔 후, 콘솔창에서 확인하기 위해 다음과 같은 시도를 했다.

 

1. new로 객체 생성 후, 값 가져오기

 

로직은 위와 같고, 실행 결과는 다음과 같았다.

모두 null 값으로 불러진 것을 확인했다.

테스트 코드로 값을 불러온 결과에서는 application.properties에서의 값들을 정상적으로 받아오는 걸 확인했고, 그렇다면 @Value 애너테이션이나 기타 파일의 코드는 문제가 없다는 걸 알 수 있었다.

 

 

2. 필드 변수를 static으로 선언해서 값 가져오기

 

이번에는 객체를 생성하지 않고, 필드 변수 그대로 받아와서 값을 출력해보았다.

결과는 다음과 같았다.

 

동일하게 두 변수 모두 null 값이 출력되었다.

 

 

두 시도 각각 null 값이 출력된 이유는 다음과 같다.

1. new 키워드로 새 객체를 생성해서 값을 받아오는 경우

→ new 키워드로 새 객체를 생성하게 되면 즉, 수동으로 인스턴스화가 되면 Spring이 내부적으로 관여하지 않기 때문에 @Value 애너테이션이 무시된다.

- https://stackoverflow.com/questions/4130486/spring-value-annotation-always-evaluating-as-null

 

2. static 변수로 선언한 후, 값을 받아오는 경우

→ static 즉, 정적 변수로 선언된 변수에는 Injection을 할 수 없기에 @Value 애너테이션이 무시된다.

- https://wildeveloperetrain.tistory.com/143

 

 

별도의 클래스에 두 변수들을 선언하고 불러와서 사용하려 했는데, 현재는 두 변수가 사용될 클래스에 전역 변수로 선언한 후 사용하고 있다.

 

추후에, 별도의 클래스에 두 변수들을 선언하고 사용하는 클래스에서는 사용만 할 수 있도록(선언과 동시에 사용하는 게 아닌) 리팩토링해보면 좋을 것 같다.