본문 바로가기

Spring 3.0 - 4.3

[Spring] @Autowired 한 class가 null로 나오는 문제 해결법 (Spring 의존성 주입 문제)

우리는 보통 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를 통해서 객체를  주입시켜 주세요.

그리고 그 주입된 객체를 가져다 쓰세요.