스프링/1. 스프링 핵심 원리

31강. 필터

sdafdq 2023. 7. 21. 21:33
@Configuration
@ComponentScan(
        basePackageClasses = AppConfig.class,
        excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes = Configuration.class)
)
public class AutoAppConfig {

}

필터는 이미 쓴 적 있다.

타입은 Annotation이 기본이므로, 빼도 괜찮다.

 

@Configuration
@ComponentScan(
        basePackageClasses = AppConfig.class,
        excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes = Configuration.class),
        includeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes = Include.class)
)
public class AutoAppConfig {

}

include 필터 라는 것 도 있다.

 

저 후, excludeFilters 로 제외한 컴포넌트들은 Bean에 등록이 안되어, getBean으로 조회할 수 없다.

 

 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyIncludeComponent {

}

직접 Annotation을 만들 수 있다. @MyIncludeComponent 이렇게 붙여서 쓴다. @Component랑 똑같이.

 

@Target이 중요한데, Type이 TYPE이면 클래스 레벨에 붙는다는 소리다 (잘 모르겠다. 그러니까 추상체가 아니고 클래스 레벨?)

 

 

 

 

앞서 Filter의 타입에 대해 다시 보면,

Annotation

Assingnable type

Aspectj

Regex

Custom

 

이렇게 있다.

 

Annotation : 디폴트

Assingnable type : 지정한 타입과 그 자식까지

Aspectj : Aspectj 패턴으로 찾아온다고 한다. 뭔소린지 모르겠다.

Regex : 정규표현식

Custom : 이거는 아예 자기가 Filter의 조건을 구현해 만들 수 있다고 한다.