expected at least 1 bean which qualifies as autowire candidate.
=> autowire 할 bean이 최소 1개는 필요하다.
스프링을 설정하며 발생했던 오류다.
- 클래스에 어노테이션 확인
오류 내용 처럼 Autowired를 할 수 없다는 오류이고,
클래스에 @Autowired, @Service, @Repository가 잘 붙었나 봐야한다!
- dispatcher servlet 의 base-package 경로 확인
<context:component-scan base-package="패키지명">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
내 경우엔 이거였다!
component-scan의 base-package 경로가 잘못되어있어 수정해 주니 바로 해결됐다.
에러를 해결하며 component-scan에 대해 알아봤고
component-scan 개념에 대해 정리해본다!
- component-scan 이란?
어노테이션을 클래스에 선언하면 스프링이 Bean으로 등록 될 준비를 마친 클래스들을 스캔하여
디폴트로 @Component @Controller @Service @Repository 를 Bean으로 등록해준다.
- component-scan 사용법
<context:component-scan base-package="패키지명"/>
위와 같이 설정하고 base package를 적으면 base package를 기준으로 클래스를 스캔해 빈으로 생성한다.
exclude-filter
: 필터를 통해 해당 어노테이션 스캔 제외, 나머지는 디폴트로 스캔
<context:component-scan base-package="패키지명">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
위와 같이 설정시 @Controller를 스캔에서 제외하고, 다른 어노테이션들은 디폴트로 스캔하게 된다.
include-filter
: 필터를 통해 포함시키고자 하는 어노테이션, 디폴트 어노테이션을 스캔 제외하고 include-filter의 어노테이션만 스캔
<context:component-scan base-package="패키지명">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
위와 같이 설정시 @Controller만 스캔하고, 다른 어노테이션들은 스캔대상에서 제외된다.
- component-scan 동작 과정
ConfigurationClassParser 가 Configuration 클래스를 파싱한다.
@Configuration 어노테이션 클래스를 파싱하는 것이다.
⬇
ComponentScan 설정을 파싱한다.
base-package 에 설정한 패키지를 기준으로
ComponentScanAnnotationParser가 스캔하기 위한 설정을 파싱한다.
⬇
base-package 설정을 바탕으로 모든 클래스를 로딩한다.
⬇
ClassLoader가 로딩한 클래스들을 BeanDefinition으로 정의한다.
생성할 빈의 대한 정의를 하는 것이다.
⬇
생성할 빈에 대한 정의를 토대로 빈을 생성한다.
References
https://rnrudxo2872.github.io/%EA%B0%9C%EC%9D%B8%EA%B3%B5%EB%B6%80/spring/Component-Scan/
https://zorba91.tistory.com/249
'SPRING' 카테고리의 다른 글
[SPRING] 엑셀 양식에 데이터 삽입 후 다운로드 (Apache POI) (0) | 2023.01.30 |
---|---|
[SPRING] Interceptor 개념 및 사용법 (0) | 2022.08.16 |
[SPRING] @Component 어노테이션 간단 사용법 (0) | 2022.05.11 |
[SPRING] MyBatis mapper.xml 수정시 서버 재시작없이 반영하기 (0) | 2022.03.28 |
[SPRING SECURITY] BCryptPasswordEncoder 비밀번호 암호화 (0) | 2022.02.04 |
댓글