🧐강의🧐
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/dashboard
- includeFilters : 컴포넌트 스캔 대상을 추가로 지정
- excludeFilters : 컴포넌트 스캔 대상에서 제외할 대상 지정
TEST
☑️ 필터를 사용해 등록한 빈 확인하기
1. test/java/hello.core/scan/filter Package 생성
2. filter 패키지에 MyIncludeComponent Interface 생성
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public interface MyIncludeComponent { }
3. filter 패키지에 MyExcludeComponent Interface 생성
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public interface MyExcludeComponent { }
4. filter 패키지에 BeanA, BeanB Class 생성
· BeanA : 컴포넌트 스캔에 추가할 대상 클래스 (@MyIncludeComponent)
· BeanB : 컴포넌트 스캔에서 제외할 대상 클래스 (@MyExcludeComponent)
// BeanA
@MyIncludeComponent
public class BeanA { }
// BeanB
@MyExcludeComponent // 컴포넌트 스캔 대상에서 제외
public class BeanB { }
5. filter 패키지에 ComponentFilterAppConfigTest Class 생성
public class ComponentFilterAppConfigTest {
@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)
);
}
@Configuration
@ComponentScan(
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
static class ComponentFilterAppConfig {}
}
➡️ includeFilters : BeanA 가 스프링 빈에 등록됨
➡️ excludeFilters : BeanB 는 스프링 빈에 등록되지 않음
FilterType 옵션
- ANNOTATION : 기본값 & 애노테이션 인식 후 동작 (생략 가능)
- ASSIGNABLE_TYPE : 지정한 타입 & 자식 타입 인식 후 동작
- ASPECT J : AspectJ 패턴 사용
- REGEX : 정규 표현식
- CUSTOM : 인터페이스(TypeFilter) 구현에서 처리
참고
- includeFilters 를 사용할 일은 거의 없음 (@Component 가 해결)
- excludeFilters 간혹 사용
- 최근 스프링 부트 : 컴포넌트 스캔 (기본) → 스프링 기본 설정으로 사용하는 것 권장
'Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[의존 관계 자동 주입] 자동 주입 대상 옵션으로 처리하기 (0) | 2023.12.19 |
---|---|
[의존 관계 자동 주입] 생성자 주입 선택하기 (2) | 2023.12.18 |
[컴포넌트 스캔] 기본 스캔 대상 (1) | 2023.12.07 |
[컴포넌트 스캔] @Component, @Autowired - 의존 관계 자동 주입 (0) | 2023.12.05 |
[싱글톤 컨테이너] @Configuration - 싱글톤 보장 (0) | 2023.12.01 |