본문 바로가기
Programming/오류노트

[SPRING] expected at least 1 bean which qualifies as autowire candidate

by 도낙원 2018. 4. 26.
반응형

  오류 노트


스프링은 설정해주는 것이 많아서 오류가 발생하면 진짜 많이 오류가 발생합니다. 그래서 오류찾기가 어렵습니다.

사실 보기도 두렵구요. 그래도 오류를 읽다보면 문제해결하는데 큰 문제는 없어보입니다.

그러니 겁 먹지말고 오류를 해결해보도록 합시다.


 Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController': Unsatisfied dependency expressed through field 'memberService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [kr.co.jimmy.service.MemberService]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}


모든 연결을 끝내고 mybatis를 이용해 회원가입 기능을 구현하던 중에 발생한 문제였습니다. 일단 모든 영어의 키워드를 읽어보면 답이 나옵니다. 스프링에서는 설정을 잘못해주면 서버를 실행하면 바로 오류가 나는 경우가 많습니다.

이렇게 되면 설정에서 잘못된 경우가 많습니다. 그래서 프로젝트를 시작할 때 한 단계씩 진행하면서 제대로 설정을 했는지 확인도 해가면서 실행을 하시는 것이 좋습니다. 

일단 저는 서버가 정상적으로 실행이 되었고 메인 페이지에 들어가면 저렇게 오류가 발생했습니다.

 오류를 제일 뒤에서 부터 해보겠습니다.


1.  expected at least 1 bean which qualifies as autowire candidate  -> autowire할 bean이 적어도 1개 필요하다

2. No qualifying bean found for dependency  -> 종속에 적합한 bean이 없다


앞에 나오는 오류는 뒤에서 발생한 오류로 인한 발생이니 일단 이것만 봐도 충분할 것 같습니다. 

일단 결론적으로 말하면 Autowired할 수 있는게 없다는 것입니다. 그렇다면 우리가 확인해봐야 할 것이 있습니다. 

우리가 @Autowired 어노테이션을 붙였는지 확인해봐야 합니다. 또한 @Service / @Repository 도 잘 붙어 있는지 확인해봐야 합니다.



일단 다 붙어 있습니다. 정상적으로 알맞게 다 붙여줬습니다.


이제 또 생각해볼 수 있는 것이 패키지명입니다.



이 페이지는 applicationContext.xml 파일입니다 . 

어노테이션을 사용할 수 있게 설정해놓은 공간이라고 생각하시면 되겠습니다.


우리가 @Autowired를 실행하기 위해선 우리가 설정해놓은 어노테이션을 찾아가게 됩니다. 즉, @Repository / @Service / @Component 를 찾아간다는 것입니다. 그것을 찾아가게끔 도와주는 것이 패키지 명입니다. 즉, 지금 kr.co.jimmy로 시작하는 패키지명을 모두 찾아서 그 밑을 일일이 조사를 하는 것입니다. 방금 언급한 어노테이션이 붙어 있는지 말이죠 

일반적으로 kr.co.jimmy.controller와 같이 패키지명을 지정했을 겁니다. 우리는 여기서 controller를 입력하진 않았지만 앞에 kr.co.jimmy 로 시작하는 패키지는 모두 검사를 하게 되는 것입니다. 혹시라도 의문을 가지는 분이 있을까봐 코멘트를 남깁니다.

붙어 있다면 정상적으로 작동이 되어야 합니다. 제 코드를 확인해보니 정상적으로 붙어 있습니다.


또 확인해볼 수 있는 것이 이 applicationContet.xml 파일이 정상적으로 web.xml에 

연결이 되어있나 확인해보시면 됩니다.

사실 이것을 제일 처음으로 확인해야 합니다. 저는 잘 몰랐기 때문에 하나하나 이렇게 찾아본 거죠 ..... 

그래도 이렇게 찾아보면서 전체적인 구조를 확인하고 공부하는 과정이 되었기 때문에 상관없습니다.

어쨋든 저는 여기서 연결을 하지 않았습니다.



web.xml 파일에 이것을 넣지 않아 발생했던 것입니다. 


이제 원인을 찾았습니다. 연결조차 안되어 있으니 위에 하려고 하는 작업을 못하는 것입니다. 

제일 처음에 설정이 잘못되면 서버 실행하면서 오류가 발생한다고 했는데 이 경우는 조금 다른 것 같습니다.

web.xml에 이미 이러한 Listener를 연결 해놓고 applicationContext.xml 파일을 안 만들면 서버가 실행하면서 오류가 발생할 것입니다. 하지만 그 반대가 되면 서버가 실행하면서 applicationContext.xml 파일은 있지만 연결하는 부분이 없기 때문에 이 xml 파일을 인식을 안해서 서버를 시작하면서 오류가 발생하지 않은 것 같습니다.


사실 제가 이렇게 오류를 해결 했지만 다른 분들에게 도움이 될지는 잘 모르겠습니다. ㅠㅠ 또한 참 멍청한 오류였지만 그만큼 얻는 것도 있는 것 같습니다. 개인적으로 ....


어쨋든 또 다른 오류로 돌아오도록 하겠습니다.

반응형
사업자 정보 표시
난길샵 | 박현숙 | 경상북도 성주군 월항면 수죽길 98길 | 사업자 등록번호 : 256-07-01668 | TEL : 010-9909-8420 | Mail : skr04@naver.com | 통신판매신고번호 : 제2020-경북성주-52호 | 사이버몰의 이용약관 바로가기

댓글