Search
Duplicate
🗞️

Component Scan

개요

Bean 등록 대상인 클래스들을 스캔하여 빈으로 등록해주는 것이다.
일반적으로 @Component 어노테이션이 있는 클래스들이 Bean 등록 대상이된다.

사용방법

xml 파일에 설정하는 방법과 .java 파일 내에서 설정하는 방법이 있다.
1.
xml 파일에 설정하는 방법
<context:component-scan base-package="com.naver"/>
XML
복사
위와 같이 xml 파일에 설정하고 base-package를 작성해주면 해당 패키지를 기준으로 클래스들을 스캔하여 빈으로 등록한다.
다음과 같이 여러 패키지를 작성하는 것도 가능하다.
<context:component-scan base-package="com.naver, com.kakao"/>
XML
복사
이때 base-package 하위의 @Controller, @Service, @Repository, @Component 클래스가 모두 Bean으로 등록되며 특정 객체만 Bean으로 등록하고 싶다면 다음 명령어를 사용하면 된다.
include-filter, exclude-filter
<context:component-scan base-package="com.naver"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
XML
복사
이 코드는 @Controller 어노테이션이 붙은 클래스들을 제외하고 Bean으로 생성한다.
2.
.java 파일 내에서 설정하는 방법
@Configuration을 사용하여 설정하는 방법이다.
@Configuration @ComponentScan(basePackages = "com.naver") public class ApplicationConfig { }
Java
복사
@Configuration은 이 클래스가 xml을 대체하는 설정 파일임을 알려준다.
해당 클래스를 설정 파일로 설정하고 @ComponentScan을 통하여 basePackages를 설정해준다.

동작과정

1.
ConfigurationClassParser@Configuration 클래스를 파싱한다.
2.
ComponentScan 설정을 파싱한다.
base-package에 설정한 패키지를 기준으로 ComponentScanAnnotationParser가 스캔하기 위한 설정을 파싱한다.
3.
base-package 설정을 바탕으로 모든 클래스를 로딩한다.
4.
ClassLoader가 로딩한 클래스들을 BeanDefinition으로 정의한다.
5.
생성할 빈에 대한 정의를 토대로 빈을 생성한다.