티스토리 뷰
- includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
- excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.
MyIncludeComponent , MyExcludeComponent (Annotation)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyIncludeComponent {
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyExcludeComponent {
}
BeanA , BeanB
@MyIncludeComponent
public class BeanA {
}
@MyExcludeComponent
public class BeanB {
}
ComponentFilterAppConfigTest
public class ComponentFilterAppConfigTest {
@Test
void filterScan(){
AnnotationConfigApplicationContext ac =
new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class);
BeanA beanA = ac.getBean("beanA", BeanA.class);
Assertions.assertThat(beanA).isNotNull();
org.junit.jupiter.api.Assertions.assertThrows(
NoSuchBeanDefinitionException.class ,
() -> ac.getBean("beanB" , BeanB.class));
}
@Configuration
@ComponentScan(
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION
, classes = MyIncludeComponent.class),
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION
, classes = MyExcludeComponent.class)
)
static class ComponentFilterAppConfig{
}
}
- includeFilters에 MyIncludeComponent 애노테이션을 추가해서 BeanA가 스프링 빈에 등록된다.
- excludeFilters에 MyExcludeComponent 애노테이션을 추가해서 BeanB는 스프링 빈에 등록되지 않는다.
FilterType 옵션
- ANNOTATION : 기본값 , 애노테이션을 인식해서 동작한다
- 예) org.example.SomeAnnotation
- ASSIGNABLE_TYPE : 지정한 타입과 자식 타입을 인식해서 동작한다.
- 예) org.example.SomeClass
- ASPECTJ : AspectJ 패턴 사용
- 예) org.example..*Service+
- REGEX : 정규 표현식
- 예) org\.example\.Default.*
- CUSTOM : TypeFilter라는 인터페이스를 구현해서 처리
- 예) org.example.MyTypeFilter
@Component면 충분하기 때문에 includeFilters를 사용할 일은 거의 없다.
excludeFilters는 여러가지 이유로 간혹 사용할 때가 있지만 많지는 않다.
특히 최근 스프링 부트는 컴포넌트 스캔을 기본으로 제공하는데 ,
개인적으로는 옵션을 변경하면서 사용하기 보다는 스프링의 기본 설정에 최대한 맞추어 사용하는 것을 권장한다.
'스프링 핵심 원리 > 컴포넌트 스캔' 카테고리의 다른 글
중복 등록과 충돌 (0) | 2020.12.27 |
---|---|
탐색 위치와 기본 스캔 대상 (0) | 2020.12.27 |
컴포넌트 스캔과 의존관계 자동 주입 시작하기 (0) | 2020.12.27 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- annotation container
- 싱글 톤 빈
- 스프링 빈 등록
- Functional Interface
- completablefuture
- 싱글톤 빈
- 스프링부트
- 프로토타입 빈
- 기본 메서드
- Iterable
- 티스토리 Open API
- 빈 생명주기
- @configuration
- 싱글 톤
- 스태틱 메서드
- H2 DB
- 의존관계 주입
- 클라이언트 서버 구조
- 함수형 인터페이스
- 기본 제공 함수형 인터페이스
- 람다 표현식
- 준영속 엔티티
- function패키지
- JPA
- 변경감지
- HTTP 메시지
- 메서드 레퍼런스
- java8
- 생성자 주입
- stream
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
글 보관함