1. 탐색할 패키지의 시작 위치 지정
모든 자바 클래스를 컴포넌트 스캔하면 시간이 오래 걸리므로, 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다.
@ComponentScan(basePackages = "hello.core", ...)
· basePackages : 탐색할 패키지의 시작 위치 지정, 이 패키지를 포함한 하위 패키지 모두 탐색
basePackages = {"hello.core", "hello.service"} 처럼 여러 시작 위치 지정 가능
· basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정
· 지정하지 않으면 @ComponentScan 붙은 설정 정보 클래스의 패키지가 시작 위치가 됨
1) 권장하는 방법
패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것 (스프링 부트도 이 방법을 기본으로 제공)
com.hello
com.hello.service
com.hello.repository
위 구조일 때, 프로젝트 시작 루트 com.hello 위치에 메인 설정 정보를 두고, @ComponentScan 어노테이션을 붙여 basePackages 지정 생략
-> com.hello 포함한 하위는 모두 컴포넌트 스캔 대상이 됨
-> 프로젝트 메인 설정 정보는 프로젝트 대표 정보이니 시작 루트에 위치시킴
-> 스프링 부트 대표 시작정보 @SpringBootApplication 을 프로젝트 시작 루트 위치에 두는 것이 관례 (@ComponentScan 들어있음)
2. 컴포넌트 스캔 기본 대상
컴포넌트 스캔 + 스프링 부가 기능 수행 어노테이션 (어노테이션이 메타 정보이기 때문)
# @Component : 컴포넌트 스캔에서 사용
# @Controller : 스프링 MVC 컨트롤러로 인식
# @Service : 개발자들이 비즈니스 계층으로 인식 (특별한 처리 X)
# @Repository : 스프링 데이터 접근 계층으로 인식, 데이터 계층의 예외를 스프링의 추상화된 예외로 변환
# @Configuration : 스프링 설정 정보로 인식, 스프링 빈이 싱글톤을 유지하도록 추가 처리 함
해당 클래스 소스 코드에 @Component 포함
@Component
public @interface Controller {
}
@Component
public @interface Service {
}
@Component
public @interface Configuration {
}
* 참고
어노테이션에는 상속 관계가 없다.
어노테이션이 특정 어노테이션을 들고 있는 것을 인식할 수 있는 것은 자바 언어가 지원하는 기능이 아닌 스프링이 지원하는 기능이다.
* 참고
useDefaultFilters 옵션은 기본으로 켜져있는데, 끄면 기본 스캔 대상들이 제외된다.
이런 옵션 존재를 알고만 있자.
참고링크 : 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?cid=325969
스프링 핵심 원리 - 기본편| 김영한 - 인프런 강의
현재 평점 5.0점 수강생 49,556명인 강의를 만나보세요. 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 스프링 기본 기능, 스프
www.inflearn.com
'강의 실습 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
| 중복 등록과 충돌 (0) | 2026.04.23 |
|---|---|
| 필터 (0) | 2026.04.22 |
| 컴포넌트 스캔과 의존관계 자동 주입 시작하기 (0) | 2026.04.20 |
| @Configuration과 바이트코드 조작의 마법 (1) | 2026.04.18 |
| @Configuration과 싱글톤 (0) | 2026.04.17 |
댓글