@ComponentScan의 정의
직접 xml이나 java코드로 설정파일을 작성할 필요 없이 @Component 어노테이션이 붙은 클래스들을 스프링 빈으로 등록해주는 Decorator
@Autowired를 이용하여 설정했던 의존관계도 그대로 적용된 채로 Bean에 등록됩니다.
사용 예시
@Configuration
@ComponentScan
public class AutoAppConfig {
...
}
추가 옵션
탐색 패키지 위치 지정
@ComponentScan(basePackages = "hello.core")
코드 설명
@ComponentScan은 기본 옵션으로 @ComponentScan 어노테이션을 붙힌 클래스가 있는 위치부터 그 하위로 @Component 어노테이션이 붙은 클래스를 스캔합니다. 이 옵션을 통해 탐색을 시작할 경로를 변경할 수 있습니다.
필터링 기능
1. FilterType 옵션
- ANNOTATION: 기본값, 애노테이션을 인식해서 동작합니다.
ex)
org.example.SomeAnnotation
- ASSIGNABLE_TYPE: 지정한 타입과 자식 타입을 인식해서 동작합니다.
ex)
org.example.SomeClass
- ASPECTJ: AspectJ 패턴 사용
ex)org.example..*Service+
- REGEX: 정규 표현식
ex)org\.example\.Default.*
- CUSTOM:
TypeFilter
이라는 인터페이스를 구현해서 처리 ex)org.example.MyTypeFilter
2. 스캔 대상에서 추가
@ComponentScan(
includeFilters = {
@Filter(
type = FilterType.ASSIGNABLE_TYPE, classes = RateDiscoutPolicy.class
)
}
)
3. 스캔 대상에서 제외
@ComponentScan(
excludeFilters = {
@Filter(
type = FilterType.ASSIGNABLE_TYPE, classes = FixedDiscoutPolicy.class
)
}
)