30주차 - 필터(includeFilters, excludeFilters)
[add] 필터 [#28] #30
- includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
- excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.
Annotation
MemberServiceImpl 에 있는 @Component 클릭해서 3개만 복붙한다.
➡️ MyIncludeComponent가 붙은 것은 컴포넌트 스캔에 추가한다는 뜻이다.
MyExcludeComponent도 위와 같이 추가했다.
클래스 2개 만들기 BeanA, BeanB
MyIncludeComponent는 BeanA
MyExcludeComponent는 BeanB
![]() |
![]() |
Test 생성 (ComponentFilterAppConfigTest)
FilterType.ANNOTATION : 어노테이션과 관련된 필터를 만든다.
@Configuration
@ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class))
static class ComponentFilterAppConfig {
}
⬇️ @ComponentScan에 static import 후
@Configuration
@ComponentScan(includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class))
static class ComponentFilterAppConfig {
}
제외하는 필터 추가
@ComponentScan(
includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
includeFilters 에 MyIncludeComponent 애노테이션을 추가해서 BeanA가 스프링 빈에 등록된다.
excludeFilters 에 MyExcludeComponent 애노테이션을 추가해서 BeanB는 스프링 빈에 등록되지 않는다.
* FilterType은 5가지 옵션이 있다. pdf 참고
Test 해보기 filterScan()
BeanA는 값이 조회가 되어야 하고
BeanB는 NoSuchBeanDefinitionException 이 나와야 한다.
*
@Component 면 충분하기 때문에, includeFilters 를 사용할 일은 거의 없다.
excludeFilters 는 여러가지 이유로 간혹 사용할 때가 있지만 많지는 않다.
특히 최근 스프링 부트는 컴포넌트 스캔을 기본으로 제공하는데,
개인적으로 옵션을 변경하면서 사용하기보다는
스프링의 기본 설정에 최대한 맞추어 사용하는 것을 권장하고, 선호하는 편이다.