| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- python
- 객체지향
- 심볼릭 레퍼런스
- 백준
- Spring
- 스프링
- 플랫폼 클래스 로더
- 딕셔너리
- 클래스 로더 계층
- 컴포넌트 스캔
- 알고리즘
- BFS
- python list method
- 자료구조
- 2026 AWS SAA-C03
- 파이썬 리스트 메서드
- 코딩테스트
- 자바
- 파이썬 문자열 메서드
- AWS SAA-C03 합격후기
- 스프링 컨테이너
- 다이렉트 레퍼런스
- 파이썬
- aws saa-c03
- java
- dfs
- 부트스트랩 클래스 로더
- stop the world
- getreference
- 어플리케이션 클래스 로더
- Today
- Total
클라우드 낚시꾼
[Spring] 컴포넌트 스캔: 탐색 위치와 기본 스캔 대상 & 필터 본문
1. ComponentScan 탐색 위치
@ComponentScan 애노테이션이 붙은 설정 클래스로 스프링 컨테이너를 생성할 때, @Component 애노테이션이 붙은 클래스들은 Bean으로 등록된다. 그런데 @Component 애노테이션이 붙은 클래스들을 탐색할 때 시작점은 어딜까?

- basePackages: 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함해서 하위 패키지를 모두 탐색한다.
- basePackageClasses: 지정한 클래스의 패키지를 탐색 위치로 지정한다.
- 미지정: @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.
권장하는 방법

위와 같은 프로젝트 구조가 있다고 해보자. 설정 정보 클래스를 어디에다 둬야 될까? 권장되는 방법은 따로 탐색 위치를 지정하지 않고, 설정 정보 클래스를 프로젝트의 최상단에 두는 것이다. 즉, com.hello에 설정 정보 클래스를 두고 @ComponentScan 애노테이션을 붙인다. 또한, 프로젝트 설정을 대표하는 정보는 프로젝트 시작 루트에 위치시키는 것이 관례이기도 하다.
2. ComponentScan의 기본 스캔 대상

컴포넌트 스캔은 @Component 뿐만 아니라 위의 내용도 추가로 스캔 대상에 포함한다. 해당 클래스의 소스 코드를 보면 @Component를 포함하고 있는 것을 볼 수 있다.

ComponentScan의 대상인 @Controller가 @Component를 포함하고 있는 것을 확인할 수 있다.
3. 필터

- includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
- excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.
위 코드의 ComponentScan은 includeFilters로 MyIncludeComponent 애노테이션이 붙은 클래스를 추가로 컴포넌트 스캔하고, excludeFilters로 MyExcludeComponent 애노테이션이 붙은 클래스를 컴포넌트 스캔 대상에서 제외하고 있다.
FilterType 옵션

includeFilters는 잘 사용되지 않는다
이 글의 문단 1에 적었듯이, 프로젝트 최상단에 설정 정보를 두는 것이 권장된다. 그렇기에 사실상 프로젝트 전체를 ComponentScan 하는 상황에서 includeFilters를 사용할 상황은 거의 발생하지 않는다.
4. 세줄 요약 (+ 출처)
- 컴포넌트 스캔의 탐색 위치는 basePackages, basePackageClasses로 설정할 수 있다. 또는, 탐색 위치를 미지정하여 @ComponentScan이 위치한 패키지를 컴포넌트 스캔 탐색 위치로 설정할 수 있다.
- @ComponentScan 설정 클래스를 프로젝트 최상단에 두는 방법이 권장된다.
- includeFilters, excludeFilters로 컴포넌트 스캔 대상에 추가할 / 배제할 대상을 지정할 수 있다.
스프링 핵심 원리 - 기본편 강의 - 인프런
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢
www.inflearn.com
'BE Framework > SpringBasic' 카테고리의 다른 글
| [Spring] Lombok(롬복) 사용하기 (@RequiredArgsConstructor) (0) | 2024.03.19 |
|---|---|
| [Spring] @Autowired(required)와 의존관계 주입 방법 (0) | 2024.03.18 |
| [Spring] 컴포넌트 스캔과 스프링 빈 자동 주입 (0) | 2024.03.16 |
| [Spring] @Configuration과 CGLIB (0) | 2024.03.14 |
| [Spring] 싱글톤 패턴과 싱글톤 컨테이너 (0) | 2024.03.13 |