컴포넌트 스캔에서 대상을 추가하거나 제외할 대상을 선택할 수 있다.
MyIncluderComponent, MyExcluderComponent 애노테이션을 만들어 보자
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 {
}
BeanA는 Include로 BeanB는 Exclude로 설정했다.
이제 설정 정보에서 MyIncluderComponent애노테이션이 붙은 class는 빈으로 등록 MyExcluderComponent애노테이션이 붙은 class는 빈으로 등록되지 않도록 해주어야 한다.
@Configuration
@ComponentScan(
includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
static class ComponentFilterAppConfig{
}
ComponentFilterAppConfig 설정정보 클래스를 만들었다.
@ComponentScan의 괄호 안에 includerFilters, excluderFilters를 type을 지정해 주고 class를 지정해 주면 된다.
그 후 Test코드를 작성하여 BeanA가 등록이 되었는지 BeanB가 등록이 되지 않았는지 Test를 해보자
@Test
void filterScan() {
ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class);
BeanA beanA = ac.getBean("beanA", BeanA.class);
assertThat(beanA).isNotNull();
assertThrows(
NoSuchBeanDefinitionException.class,
() -> ac.getBean("beanB", BeanB.class)
);
}
테스트가 잘 통과하는 것을 볼 수 있다.
출처 : 인프런 스프링 핵심 원리 - 기본 편 김영한
'스프링' 카테고리의 다른 글
생성자 주입의 장점, 룸복사용 (0) | 2023.07.21 |
---|---|
다양한 의존관계 주입 방법 (0) | 2023.07.19 |
컴포넌트 스캔 탐색 위치 (0) | 2023.07.18 |
컴포넌트 스캔 (0) | 2023.07.17 |
Configuration과 싱글톤 (0) | 2023.07.14 |