Study/SpringBoot

Spring - @Value가 계속 null을 가져올 때 원인과 해결 방법

오늘만 사는 여자 2024. 2. 7. 10:21
728x90
반응형

@Value란?

DB 접속 정보나 비밀번호와 같이 민감한 정보를 별도의 파일로 분리해서 환경 정보에 맞는 값을 불러오도록 하는 애너테이션이다. application.properties 또는 application.yml에 값을 설정하면 필드나 메서드에 값을 주입해준다.

 

원인

@Value 애너테이션이 property 값을 받아오지 못하는 경우는 크게 네 가지가 있다.

  1. 프로퍼티 이름을 잘못 입력했을 경우
    • 내 코드에서는 문제는 따로 문제가 없었다.
  2. Bean으로 등록되지 않은 경우
    • 클래스를 Bean으로 등록하지 않으면 Spring이 의존성 주입을 할 수 없다.
    • AES128Config 클래스는 @Component 애너테이션으로 Bean 등록을 했기 때문에 이 부분도 문제가 없었다.
  3. static 변수로 받은 경우
    • @Value 값은 static 변수로 받을 수 없다.
  4. 외부에서 해당 클래스를 new로 생성했을 경우
    • @Value 애너테이션은 Spring Context에 의존하기 때문에 해당 클래스가 Spring Bean으로 등록되어 있지 않으면 @Value 값은 null을 반환한다.
    • 따라서 new로 클래스 인스턴스를 생성하면 Spring Bean으로 등록되어 있지 않았기 때문에 @Value 값이 null을 반환했던 것이다.
    • 등록된 Bean을 사용하기 위해서는 @Autowired 애너테이션을 사용해야 한다. @Autowired 애너테이션은 해당 타입의 Bean을 찾아서 주입해준다.
    • 내가 겪은 문제도 Test하는 과정에서 AES128Config 클래스 인스턴스를 new로 생성했기 때문에 발생했다. AES128Config 클래스를 @Autowired 애너테이션으로 주입해주자

출처 : https://green-bin.tistory.com/53

728x90
반응형