Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- spring
- 자바
- Android
- SpringBoot
- Greedy
- 백준
- JDBC
- transaction
- 스프링 핵심 기능
- AOP
- kotlin
- Thymeleaf
- springdatajpa
- Proxy
- 김영한
- 그리디
- 스프링 핵심 원리
- 인프런
- 스프링
- db
- java
- Exception
- http
- jpa
- JPQL
- pointcut
- 알고리즘
- Spring Boot
- Servlet
- QueryDSL
Archives
- Today
- Total
개발자되기 프로젝트
컴포넌트 스캔, 필터 본문
- includeFilters : 스캔 대상 추가
includeFilters = @ComponentScan.Filter(type = , classes = ) - excludeFilters : 스캔 대상에서 제외
excludeFilters = @ComponentScan.Filter(type = , classes = )
1. MyIncludeComponent Annotation
- 해당 annotaion이 붙은 클래스는 컴포넌트 스캔에 포함
@Target(ElementType.TYPE) //TYPE : class레벨에 붙음
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyIncludeComponent {
//얘가 붙은건 Component 스캔에 추가할 거임 ㅋㅋㅋㅋ
}
2. MyExcludeComponent Annotaion
- 해당 annotation이 붙은 클래스는 컴포넌트 스캔에서 제외
@Target(ElementType.TYPE) //TYPE : class레벨에 붙음
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyExcludeComponent {
//얘는 스캔에서 제외
}
3. BeanA, BeanB
- BeanA : @MyIncludeComponent --> 스캔에 포함
- BeanB : @MyExcludeComponent --> 스캔에서 제외
@MyIncludeComponent
public class BeanA {
}
@MyExcludeComponent
public class BeanB {
}
4. Test
- BeanA는 스캔 대상에 포함되어 Bean으로 등록됨
- BeanB는 스캔 대상에서 제외되어 Bean으로 등록되지 않음
public class ComponentFilterAppConfigTest {
@Test
void filterScan(){
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ComponentFilterAppConfig.class);
BeanA beanA = ac.getBean("beanA", BeanA.class);
Assertions.assertThat(beanA).isNotNull();
//BeanB beanB = ac.getBean("beanB", BeanB.class);
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 {
}
}
5. Filter Type 옵션
- ANNOTATION : 기본값, @Annotation 인식해서 동작 --> 생략 쌉가능
- ASSIGNABLE_TYPE : 지정한 타입과 자식 타입을 인색해서 동작 --> 클래스 직접 지정
- ASPECTJ : AspectJ 패턴 사용 바로 찾아옴
ex) org.exampl..*Service+ - REGEX : 정규 표현식
ex) org\.example\.Defulat.* - CUSTOM : TypeFilter라는 인터페이스 구현해서 처리
ex) org.example.MyTypeFilter
6. GitHub : 210728 ComponentScan filter
'인프런 > [인프런] Spring 핵심원리 이해' 카테고리의 다른 글
의존관계 주입 방법 (0) | 2021.07.29 |
---|---|
컴포넌트 스캔, 중복 등록, 충돌 (0) | 2021.07.28 |
Component Scan의 탐색 위치와 스캔 대상 (0) | 2021.07.28 |
Component 스캔, @Autowired (0) | 2021.07.28 |
@Configuration, 싱글톤, 바이트코드 조작 (0) | 2021.07.28 |
Comments