[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 는 여러가지 이유로 간혹 사용할 때가 있지만 많지는 않다.
특히 최근 스프링 부트는 컴포넌트 스캔을 기본으로 제공하는데,
개인적으로 옵션을 변경하면서 사용하기보다는
스프링의 기본 설정에 최대한 맞추어 사용하는 것을 권장하고, 선호하는 편이다.
'WIL' 카테고리의 다른 글
32주차 (0) | 2022.04.24 |
---|---|
31주차 - 오류 (0) | 2022.04.17 |
29주차 - 탐색 위치와 기본 스캔 대상 (1) | 2022.04.03 |
28주차 (0) | 2022.03.27 |
27주차 - 스터디(BeanDefinition , 싱글톤) (0) | 2022.03.20 |