오늘은 Spring Component Scan에 대해 알아보겠습니다.
ComponentScan은 간단히 말하면 Spring프로젝트를 할때 클래스를 Spring Bean으로 만들때 특정 애노테이션이 달린 클래스를 검색할 위치를 Spring에 알리는 것입니다.
- Spring Application에서 @ComponentScan 사용
@SpringBootApplication 애노테이션을 등록하고 정의를 따라가보면 @ComponentScan 애노테이션을 확인 하실 수 있습니다.
ComponentScan 대상
- @Component 애노테이션이 붙어 있으면 스캔 대상이 됩니다.
- @Controller, @Service, @Repository 모두 @Component가 설정되어 있으므로 스캔에 대상이 됩니다.
- @Configuration 애노테이션에도 @Component가 설정되어 있으므로 스캔에 대상이 되고, 싱글톤을 유지합니다.
인수가 없는 @ComponentScan
- 인수가 없는 @ComponentScan은 Spring에 현재 패키지와 모든 하위 패키지를 스캔하도록 지시합니다.
인수가 있는 @ComponentScan
@ComponentScan(basePackages = "co.kr.pet.gommi")
@Configuration
public class SpringComponentScanApp {
// ...
}
basePackages 속성으로 위와 같이 패키지를 지정하면 지정된 패키지 하위만 ComponentScan의 대상이 됩니다.
위의 사용자 정의 ComponentScan은 Spring Boot @SpringBootApplication과 동일한 결과를 보여줍니다.
@SpringBootApplication
@ComponentScan(basePackages = "co.kr.pet.gommi")
1. 여러 패키지의 @ComponentScan
여러패키지를 사용하려면 문자열 배열을 사용하면 됩니다.
스프링 4.1.1부터 쉽표, 세미콜롤 또는 공백을 사용하여 패키지 목록을 구분할 수 있습니다.
@ComponentScan(basePackages = "co.kr.pet.gommi","co.kr.favorite.movie")
2. @ComponentScan with Exclusions
필터를 사용하여 제외할 클래스의 패턴을 지정할 수 있습니다.
@ComponentScan(excludeFilters =
@ComponentScan.Filter(type=FilterType.REGEX,
pattern="co\\.kr\\.pet\\.gommi\\..*"))
필터링하기 위한 몇 가지 옵션을 지원 하므로 다른 필터 유형을 선택하실 수 있습니다.
@ComponentScan(excludeFilters =
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Gommi.class))
정리
오늘은 ComponentScan에 대해 알아봤습니다. 간단하게 나마 ComponentScan이 무엇인지 @ComponentScan 애노테이션을 사용하여 컴포넌트를 검색하는 법을 알게 되셨으면 좋겠습니다.
'IT > SPRING BOOT' 카테고리의 다른 글
SpringBoot 2.7.5 To 3.0.1로 마이그레이션 하기 (0) | 2023.04.21 |
---|---|
Springboot 3.0에 변화에 대해 알아보자 (1) | 2023.04.17 |
Entity VO DTO에 대해 알아보자 (0) | 2023.04.13 |
Spring Security Authenticate에 대해 알아보자 (0) | 2023.04.10 |
Spring boot AOP에 대해 알아보자 (0) | 2023.04.08 |