ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 필터
    spring/스프링 핵심 원리 강의 내용 정리 2023. 12. 9. 18:32

    필터
    - includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다
    - excludeFilters : 컴포턴트 스캔에서 제외할 대상을 지정한다

    예제로 확인해 보자

    @Target 에 대한 어노테이션은 따로 공부가 필요하다고 한다

    지금은 가볍게 사용하기 위해 @Component의 구현으로 들어가 위에 있는 어노테이션 3개를 복사해서 붙혀넣었다

     

    참고로 파일을 클래스, 인터페이스가 아니라 가장 밑에 어노테이션으로 만들었다

    이런식으로 어노테이션을 만들 수 있다

     

    클래스 BeanA 에는 방금 만든 @MyIncludeComponent 를,

    클래스 BeanB 에는 @MyExcludeComponent 를 넣었다

     

     

    @Configuration 을 만들어 includeFilters 에 MyIncludeComponent 를 등록했고,
    excludeFilters 에 MyExcludeComponent 를 등록했다
    그 결과 BeanA 는 get.Bean 으로 조회가 가능했고,
    BeanB는 조회가 불가능하여 NoSuchBeanDefinitionException.class 가 나왔다

    FilterType 옵션 5가지
    - ANNOTATION : 기본값, 에노테이션을 인식해서 동작한다 (위 코드에서도 생략이 가능하다)
     - ex) org.example.SomAnnotation
    - ASSIGNABLE_TYPE : 지정한 타입과 자식 타입을 인식해서 동작한다
     - ex) org.example.SomeClass
    - ASPECTJ : AspectJ 패턴 사용
     - ex) org.example..*Service+
    - REGEX : 정규 표현식
     - ex) org\.example\.Default.*
    - CUSTOM : TypeFilter 이라는 인터페이스를 구현해서 처리
     - ex) org.example.MyTypeFilter

    예를 들어서 BeanA도 빼고 싶으면 다음과 같이 추가하면 된다
    excludeFilters = {
     @Filter(type = FilterType.ANNOTATION, classes =
    MyExcludeComponent.class),
     @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = BeanA.class)

    참고: @Component 면 충분하기 때문에, includeFilters 를 사용할 일은 거의 없다
    excludeFilters 는 여러가지 이유로 간혹 사용할 때가 있지만 많지는 않다
    특히 최근 스프링 부트는 컴포넌트 스캔을 기본으로 제공하는데,
    개인적으로는 옵션을 변경하면서 사용하기 보다는
    스프링의 기본 설정에 최대한 맞추어 사용하는 것을 권장하고, 선호하는 편이다

Designed by Tistory.