# 필터

**includeFilters** : 컴포넌트 스캔 대상을 추가로 지정한다.\
**excludeFilters** : 컴포넌트 스캔에서 제외할 대상을 지정한다.

테스트 코드 예시

![](https://3827409906-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdFkJ5hOZX5yyMKQHqf%2F-MdWrEGNnKZsSQ3t04XZ%2F-MdWreTWzzi6s7YMJHi3%2FincludeFilters%2C%20excludeFilters%20%E1%84%90%E1%85%A6%E1%84%89%E1%85%B3%E1%84%90%E1%85%B3%E1%84%8F%E1%85%A9%E1%84%83%E1%85%B3.png?alt=media\&token=61a5f12e-f01d-4974-99ed-9487a849096e)

FilterType 5가지 옵션

1. **ANNOTATION**: 기본값, 애노테이션을 인식해서 동작한다. \
   ex) org.example.SomeAnnotation
2. **ASSIGNABLE\_TYPE**: 지정한 타입과 자식 타입을 인식해서 동작한다. \
   ex) org.example.SomeClass
3. **ASPECTJ**: AspectJ 패턴 사용\
   ex) org.example..\*Service+
4. **REGEX**: 정규 표현식\
   ex) org\\.example\\.Default.\*
5. **CUSTOM**: TypeFilter 이라는 인터페이스를 구현해서 처리 ex) org.example.MyTypeFilter

BeanA : includeFilters, BeanB : excludeFilters인데 BeanA도 excludeFilters 하고 싶다면 아래처럼 하면 된다.

```java
@ComponentScan(
      includeFilters = {
            @Filter(type = FilterType.ANNOTATION, classes =
    MyIncludeComponent.class),
      },
      excludeFilters = {
            @Filter(type = FilterType.ANNOTATION, classes =
    MyExcludeComponent.class),
            @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = BeanA.class)
      }
)
```

* &#x20;참고: @Component 면 충분하기 때문에, **includeFilters 를 사용할 일은 거의 없다. excludeFilters 는 여러가지 이유로 간혹 사용할 때가 있지만 많지는 않다.**
