"컴포넌트 스캔"
- 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능
- 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록할 수 있음
- 자동 주입과 함께 사용하는 추가 기능
1. @Component 애노테이션으로 스캔 대상 지정
- @Component 애노테이션에 값을 주면 그 값을 빈의 이름으로 사용
- @Component 애노테이션에 값을 주지 않으면
클래스 이름의 첫 글자를 소문자로 바꾼 이름을 빈의 이름으로 사용
2. @Component 애노테이션으로 스캔 설정
- 설정 클래스에 @Component 애노테이션을 적용
- basePackages 속성값으로 스캔 대상 패키지 목록을 지정
- 하위 패키지에 속한 클래스까지 스캔 대상으로 설정됨
- 스캔 대상에 해당하는 클래스 중에서 @Component 애노테이션이 붙은 클래스의 객체를 생성해서 빈으로 등록
package config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
**import org.springframework.context.annotation.ComponentScan;**
import org.springframework.context.annotation.Configuration;
import spring.MemberPrinter;
import spring.MemberSummaryPrinter;
import spring.VersionPrinter;
@Configuration
**@ComponentScan(basePackages = {"spring"})**
public class AppCtx {
@Bean
@Qualifier("printer")
public MemberPrinter memberPrinter1() {
return new MemberPrinter();
}
@Bean
@Qualifier("summaryPrinter")
public MemberSummaryPrinter memberPrinter2() {
return new MemberSummaryPrinter();
}
@Bean
public VersionPrinter versionPrinter() {
VersionPrinter versionPrinter = new VersionPrinter();
versionPrinter.setMajorVersion(5);
versionPrinter.setMinorVersion(0);
return versionPrinter;
}
}
3. 예제 실행
4. 스캔 대상에서 제외하거나 포함하기
- excludeFilters 속성을 사용하면 스캔할 때 특정 대상을 자동 등록 대상에서 제외할 수 있음
- FilterType.REGEX : 정규표현식을 사용해서 제외 대상을 지정
- pattern 속성 : FilterType에 적용할 값을 설정