우리는 보통 bean에 의존성 주입을 하고 싶을 때, @Autowired 를 사용하는데요.
@Autowired한 class 가 null 이 나왔다는 건, 해당 클래스에 의존성 주입이 제대로 이루어지지 않았다는 것입니다.
Spring에서 의존관계 주입방법은 크게 4가지가 있는데요.
1. 생성자 주입
2. setter 주입
3. 필드 주입
4. 일반 메서드 주입
이 중, 저는 필드 주입 방법으로 의존성 주입을 해줬는데요.
(참고: Spring에서 권장하는 방식은 생성자 주입 방식 입니다)
저의 경우는, @Autowired도 잘 붙여줬고 @Service도 잘 붙여줘서 문제가 없다고 생각했는데요.
(현재 상태가 ItunesCrawlingService 클래스에 SingerDAO를 주입시켜 주어서 이 둘의 의존관계를 형성해준 것입니다.)
※ 참고
@Service, @Repository, @Component 를 붙이면 Spring Container가 관리하는 bean 객체라는 뜻입니다.
@Autowired 를 붙여주어야 두 클래스의 의존관계가 형성됩니다.
네, 여기까지는 아무 문제가 없습니다.
문제는 이 클래스를 "호출하고 있는 클래스" 로 가보세요.
(저의 경우는 ItunesCrawlingService 를 호출하고 있는 클래스로 가보았습니다.)
혹시 객체를 new로 생성했나요? 그럼 그 부분이 문제의 부분입니다.
왜냐하면
ItunesCrawlingService는 @Service 를 붙여주어 bean으로 등록된 상태입니다.
이 말은 Spring Container가 관리하고 있는 객체라는 뜻인데 이런 객체를 굳이 new로 자기가 임의로 만들어서 쓰고 있었다는 것입니다.
new로 객체를 생성해서 쓰면 그 객체는 Spring Container가 관리하는게 아니어서 @Autowired를 통한 의존성 주입이 불가해집니다.
해결방법
new로 객체를 생성하는게 아닌 @Autowired를 통해서 객체를 주입시켜 주세요.
그리고 그 주입된 객체를 가져다 쓰세요.
'Spring 3.0 - 4.3' 카테고리의 다른 글
javac: invalid target release - 메이븐 프로젝트 컴파일 시 뜨는 에러 (4) | 2020.09.25 |
---|---|
[aws] EC2 서버에 접속하기 (맥OS) (0) | 2020.09.13 |
Quartz 라이브러리 이용하기 (특정 시간에 특정 프로그램을 실행하고 싶을 때) (0) | 2020.09.12 |
[iBatis/myBatis] insert/update 쿼리 실행 후 결과 가져오기 (0) | 2020.09.06 |
메이븐 기초 (2) pom 파일 (0) | 2020.08.09 |