728x90
반응형
@Value란?
DB 접속 정보나 비밀번호와 같이 민감한 정보를 별도의 파일로 분리해서 환경 정보에 맞는 값을 불러오도록 하는 애너테이션이다. application.properties 또는 application.yml에 값을 설정하면 필드나 메서드에 값을 주입해준다.
원인
@Value 애너테이션이 property 값을 받아오지 못하는 경우는 크게 네 가지가 있다.
- 프로퍼티 이름을 잘못 입력했을 경우
- 내 코드에서는 문제는 따로 문제가 없었다.
- Bean으로 등록되지 않은 경우
- 클래스를 Bean으로 등록하지 않으면 Spring이 의존성 주입을 할 수 없다.
- AES128Config 클래스는 @Component 애너테이션으로 Bean 등록을 했기 때문에 이 부분도 문제가 없었다.
- static 변수로 받은 경우
- @Value 값은 static 변수로 받을 수 없다.
- 외부에서 해당 클래스를 new로 생성했을 경우
- @Value 애너테이션은 Spring Context에 의존하기 때문에 해당 클래스가 Spring Bean으로 등록되어 있지 않으면 @Value 값은 null을 반환한다.
- 따라서 new로 클래스 인스턴스를 생성하면 Spring Bean으로 등록되어 있지 않았기 때문에 @Value 값이 null을 반환했던 것이다.
- 등록된 Bean을 사용하기 위해서는 @Autowired 애너테이션을 사용해야 한다. @Autowired 애너테이션은 해당 타입의 Bean을 찾아서 주입해준다.
- 내가 겪은 문제도 Test하는 과정에서 AES128Config 클래스 인스턴스를 new로 생성했기 때문에 발생했다. AES128Config 클래스를 @Autowired 애너테이션으로 주입해주자
728x90
반응형
'Study > SpringBoot' 카테고리의 다른 글
[SpringBoot] Multipart file 업로드 시 "Content type 'application/octet-stream' not supported" 에러 (1) | 2024.02.16 |
---|---|
Spring application.properties Util로 만들어 쉽게 값 가져오기 (1) | 2024.02.07 |
[Warning] Spring Security csrf 경고 문장 (0) | 2024.02.06 |
@JsonIgnore, @JsonIgnoreProperties, @JsonIgnoreType차이점 (0) | 2024.02.02 |
윈도우 Active Directory 연동 (0) | 2024.02.01 |
댓글