개요
•
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.
생성할 빈에 대한 정의를 토대로 빈을 생성한다.