본문 바로가기

Server Development/Exception

Parameter 0 of constructor in ... required a bean of type ... that could not be found.

 

 

 

 

최근한 5일간 해당 오류를 해결하기 위해 많은 노력을 기울였다.

그에 따른 나름의 고찰을 정리해보고자 한다.

 

 

1. 기본적인 의미

기본적으로 해당 오류는 연결하고자 하는 빈을 못찾겠다는 의미이다. 현재 서버를 Spring으로 작성하고 있는데, Spring의 가장 큰 특징은 제어의 역전이라고 할 수 있다. 이러한 빈들을 주입할 때, xml을 작성하지 않고도 SpringBoot에서는 자동으로 빈을 주입해준다. 하지만 이 오류는 이러한 주입을 하려고 하는데 주입하고자 하는 빈을 못찾겠다는 의미이다.

 

 

 

 

2. 해결방법

 

2-1. 명시해서 알려주는 방법

- 해당 방법은 약간 너가 못찾겠으면 내가 패키지명을 알려줄테니까 거기서 찾아봐라는 의미이다. 

아래와 같이 작성시 해당 패키지에서 찾고자 하는 빈을 찾아준다.

@SpringBootApplication(scanBasePackages = {"com.example.package1", "com.example.package2"})

 

 

2-2. 빈을 정확히 설정하였는가?

- 가끔 오류가 나는 이유 중 하나로 제대로 애너테이션을 설정하지 않았기에 발생하기도 한다. @Controller, @Bean, @Service 등 제대로 컴포넌트, 빈 등을 명시해주었는지 확인하자

 

 

 

2-3. 가끔 스프링은 변경 사항에대해서 제대로 인식하지 못하는 경우가 있는 듯 하다.

- 내가 겪었던 문제이다. 이걸 해결하기 위해 4일이 걸렸다. 상황은 그렇다. 클래스 명이 맘에 안들어서 일련의 클래스의 이름을 변경을 해주었다. 이 후, 이러한 오류가 발생했다. 아무리 확인해도 전혀 문제가 없었다.. 다른 이유에서 오류가 나는 줄 알고 열심히 해결하려 노력하였던 것 같다. 결론적으로 이름 바꾼 빈을 모두 주석처리해주니 잘 동작하였다. 따라서 만약 이름을 바꾸는 경우 동작이 잘 안된다면 그냥 새로 만드는 것을 추천한다.