[스프링 Error]org.springframework.beans.factory.NoSuchBeanDefinitionException 에러메시지

Error creating bean with name 'reportController' defined in file [file 주소]

Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type '
'service.ReportService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

 

아마 다들 자주 이러한 메시지를 많이 봐오셨을 것입니다. 

 

사실 스프링 프레임워크를 처음 접하시는 분들은 아마 용어 때문에 많이 이 에러에서 헤맬 것이라고 생각되는데요. 하나씩 읽어가보겠습니다.

 


 

Error creating bean with name 'reportController' defined in file [file 주소]

- 해당 내용은 reportController 라는 Bean을 정의하지 못했다는 아주 간단한 메시지입니다. 빈이란 스프링에서 싱글톤 형태로 관리되는 객체를 의미하며 스프링을 처음 빌드할 때 이러한 Bean들을 생성하는 과정을 거치게 됩니다. 근데 그 과정에서 reportController라는 이름을 가진 Bean 을 만드는 데에 오류가 발생했다는 것입니다.

 

 

Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:

이 부분은 이제 dependency라는 용어를 알아야 할텐데

예컨데 

@Controller
public class ReportController {
    private ReportService reportService;
    
    public ReportController(ReportService reportService) {
    	this.reportService = reportService;
    }
    
}

ReportController 라는 클래스는 ReportService의 기능을 사용하지 않으면 구현할 수 없는 클래스입니다. 즉 ReportService에게 dependent한 상태가 되죠. 여기서 의존관계가 결정된다고 할 수 있습니다. 즉 ReportController의 Bean 객체를 만들기 위해서는 인스턴스가 필요한데, 그러기 위해서는 ReportService의 인스턴스가 먼저 필요하게 되는 것이죠.( 생성자의 인자로 필요하니까요)

즉, parameter 0 번째 인덱스에서 exception 이발생했다는 것이고 그 내용이 NoSuchBeanDefinitionException 입니다.

 

 

expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

parameter 0 번째 인덱스에서 NoSuchBeanDefinitionException이 발생하게된 이유는 무엇일까요?? 말 그대로 해당 Bean 을 찾지 못했기 때문입니다.. 왜 찾지 못했는지는 이제 여러분의 상황에 따라 달라지게 됩니다.

 

저같은 경우는 ReportService 클래스에 @Service라는 어노테이션을 추가하지 못했기 때문에 스프링에서 ReposrtService에 해당하는 Bean을 결국 생성하지 못했고, ReportController에 주입시켜줄 수 없었기 때문에 에러가 발생했었어요!

 


 

사실 스프링을 활용하는 개발자라면 너무나 쉬운 내용일텐데요. 처음 접하는 초급자에겐 원리조차 알지 못하는 영역이 있을거라고 생각했습니다.

 

다음의 에러메시지 분석글이 많은 초급 스프링 개발자들에게 조금이라도 와닿는 설명과 이해를 시켰으면 좋겠습니다.!

 

앞으로도 에러메시지를 메시지 그대로 디버깅해보는 시리즈를 포스팅해보겠습니다.

 

감사합니다.

댓글

Designed by JB FACTORY