728x90
관련글 : https://rebornbb.tistory.com/entry/Spring-Resource-Autowired-Inject-%EC%B0%A8%EC%9D%B4
Spring에서 @Autowired 어노테이션을 사용하여 의존성 주입을 할 때 원하는 객체가 null로 반환되는 경우가 발생할 수 있습니다. 특히 필드 주입 방식을 사용하는 경우 주의가 필요합니다. 이러한 문제는 일반적으로 의존성 주입이 제대로 이루어지지 않은 경우 발생하며, 해결 방법은 상황에 따라 다릅니다.
2. 주요 원인
필드 주입 방식으로 @Autowired를 사용할 때 발생하는 null 문제는 다음과 같은 이유가 있습니다.
- 객체 생성 방식: new 키워드를 사용하여 직접 객체를 생성하는 경우 @Autowired 어노테이션이 동작하지 않습니다. Spring은 관리되는 객체만 의존성 주입을 지원하기 때문입니다.
- 컴포넌트 스캔 누락: @Autowired하려는 객체가 스프링 컨테이너에서 컴포넌트 스캔 대상으로 설정되지 않은 경우 null 객체가 반환될 수 있습니다.
- 순환 참조: 서로 @Autowired로 의존하는 객체 사이에 순환 참조가 발생하는 경우 null 문제가 발생할 수 있습니다.
- 명칭 불일치: @Autowired 어노테이션과 실제 객체 이름이 일치하지 않으면 null 객체가 반환될 수 있습니다.
3. 해결 방법
다음은 필드 주입 방식으로 @Autowired null 문제를 해결하는 방법입니다.
1. 객체 생성 방식 확인:
- @Autowired 객체를 생성하는 코드에서 new 키워드를 사용하지 않는지 확인합니다.
- @Autowired 객체는 반드시 스프링 컨테이너가 생성해야 합니다.
- 객체 생성을 직접 수행해야 하는 경우 @Autowired 대신 직접 생성 후 주입하는 방식을 사용해야 합니다.
2. 컴포넌트 스캔 설정 확인:
- @Autowired하려는 객체가 @Component, @Service, @Repository와 같은 어노테이션으로 스프링 컴포넌트로 정의되었는지 확인합니다.
- 만약 @Component 스캔 대상이 아닌 경우, 해당 클래스를 @ComponentScan 어노테이션에 명시적으로 추가하거나 컴포넌트 스캔 설정을 확장해야 합니다.
3. 순환 참조 해결:
- 순환 참조가 발생하는 경우, 객체 중 하나를 @Lazy 어노테이션으로 선언하거나 의존성 관계를 수정하여 순환 참조를 제거해야 합니다.
4. 명칭 일치 확인:
- @Autowired 어노테이션에 명시된 이름과 실제 객체 이름이 정확히 일치하는지 확인합니다.
- 만약 이름이 일치하지 않으면 @Autowired 어노테이션의 name 속성을 사용하여 명시적으로 이름을 지정해야 합니다.
5. 기타 확인 사항:
- Spring 버전과 관련된 버그 또는 문제가 있는지 확인합니다.
- 사용 중인 IDE나 빌드 도구에서 Spring 설정을 올바르게 인식하고 있는지 확인합니다.
- 필요한 경우 Spring 프레임워크 공식 문서 및 커뮤니티 포럼을 참고하여 추가적인 정보를 얻습니다.
참고 출처 : https://rimkongs.tistory.com/256
728x90
'STUDY > SpringLegacy' 카테고리의 다른 글
[STS] Spring MVC Project 템플릿 없음 해결방법 (0) | 2024.10.11 |
---|---|
[Spring] Spring에서 클라이언트로부터 파라미터를 받는 방법과 Content-Type 설정 (0) | 2024.07.30 |
[Spring] Bean 등록하는 다양한 방법 (1) | 2024.05.21 |
[Spring] @Resource, @Autowired, @Inject 차이 (0) | 2024.05.21 |
[Spring] [JS] SSE (Server-Sent Events) 사용하기 (0) | 2024.05.21 |