스프링

스프링 빈 필터

salmon16 2023. 7. 18. 18:55

컴포넌트 스캔에서 대상을 추가하거나 제외할 대상을 선택할 수 있다.

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