복습

컴포넌트 스캔 - 필터 본문

Spring뿌시기/3주차 - 스프링 핵심 원리 기본편 2

컴포넌트 스캔 - 필터

ykm1256 2022. 10. 24. 22:43

필터

  • 필터를 사용하여 수동으로 스캔 대상을 추가로 지정하거나, 스캔 대상에서 제외할 수 있다.
  • includeFilters : 컴포넌트 스캔 대상을 추가로 지정
  • excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정

애노테이션 코드

// 스캔 대상
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyIncludeComponent {
}

// 스캔 제외 대상
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyExcludeComponent {
}
  • 스캔 대상을 지정할 애노테이션과, 스캔 제외 대상을 지정할 애노테이션을 구현
@MyIncludeComponent
public class BeanA {
}

@MyExcludeComponent
public class BeanB {
}
  • 각각의 애노테이션을 사용하여 BeanA는 스캔 대상으로 지정, BeanB는 스캔 제외 대상으로 지정
@Test
void filterScan() {
    ApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class);
    
    BeanA beanA = ac.getBean("beanA", BeanA.class);
    assertThat(beanA).isNotNull();
    
    Assertions.assertThrows( NoSuchBeanDefinitionException.class,
    () -> ac.getBean("beanB", BeanB.class));
}
    
@Configuration
@ComponentScan(
        includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
        excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
static class ComponentFilterAppConfig {
}
  • @ComponentScan애노테이션에 각각 includeFilters와 excludeFilters를 지정해준다.
  • 따라서 BeanA는 스프링빈에 등록되고, BeanB는 스프링 빈에 등록되지 않는다.

 

FilterType 옵션

  • ANNOTATION : 기본값, 애노테이션을 인식해서 동작
  • ASSIGANBLE_TYPE : 지정한 타입과 자식 타입을 인식해서 동작
  • ASPECTJ : AspectJ 패턴 사용
  • REGEX : 정규 표현식
  • CUSTOM : TypeFilter라는 인터페이스를 구현해서 처리
@Component면 충분하기 때문에, includeFilters를 사용할 일은 거의 없다.
excludeFilters는 여러 이유로 간혹 사용할 때가 있지만 많지 않다.
최근 스프링 부트는 컴포넌트 스캔을 기본으로 제공하는데, 개인적으로는 옵션을 변경하면서 사용하기 보다는 스프링의 기본 설정에 최대한 맞추어 사용하는 것을 권장하고, 선호하는 편이다.

 

 

 

 

 

 


출처

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com