[스프링] Injection of authwired dependencies failed(Could not autowired field) 에러

학원생 수강 시절, 스프링으로 간단히 예제를 잡는 과정에서 예상치못한 실수를 하여 에러를 냈습니다..ㅠㅠ

간단한 것이었는데 에러메시지 검색해볼 생각도 안하고 혼자 잡아보다가 고생했었던 에러메시지를 공유하고자 합니다.

 

에러창 화면

메시지는 memberController라는 빈을 생성하고자하는데 @Autowired할 때 빈생성에서 에러가 난다는 메시지였습니다. 처음에는 @Autowired의 문제점인 circular reference에 관한 상황이 여기서 발견되는건가 싶어서 신기해했지만..

 

이유는 다름아닌 @Service 어노테이션때문이었습니다...

 

스프링 프레임워크는 기본적으로 스프링컨텍스트 내에 Bean이라는 스프링이 관리하는 객체들을 싱글톤으로 관리하고 있습니다. 즉 @Autowired로 주입해주는 그 인스턴스는 다른 클래스에서 주입받는 녀석과 같은 주소값을 가지는 녀석이죠.

 

이러한 스프링 Bean을 만드는 과정에서 어노테이션 1개가 사용됩니다.

 

바로 @Component라는 어노테이션이죠. 사실 스프링 MVC를 활용하여 레거시 프로젝트를 할 때 @Controller, @Service, @Repository 요 세가지정도만 많이 사용하게되는데, 사실 이 세가지 어노테이션 안에는 @Component 어노테이션이 포함되어 있습니다.

 

즉, 컨트롤러, 서비스, 레파지토리(다오) 는 모두 스프링 빈으로 등록되는 객체입니다. 그래야 @Autowired를 활용해서 주입이 가능한 스프링 빈이 되는 것입니다.

 

결론적으로 말씀드리면...

 

실수로 서비스 클래스에 @Service를 선언하는 것을 까먹었습니다.!!

 

이런 실수 하지 마시라고 공유드립니다~!

댓글

Designed by JB FACTORY