basePackages

Category
스터디노트 Spring
Status
Published
Tags
Spring
BasePackages
Description
Published
Slug

basePackages란?

@ComponentScan( basePackages = "hello.core.member" )
이 설정은 스프링이 컴포넌트 스캔을 시작할 기준 위치를 지정하는 것
"hello.core.member" 패키지와 그 하위 패키지들만 스캔해서, @Component가 붙은 클래스들을 스프링 빈으로 등록하라는 뜻
 

기본 동작과 비교

아무것도 안 썼을 때

@ComponentScan // basePackages 생략
  • 이 경우, @ComponentScan이 붙은 클래스의 패키지부터 시작해서 하위 패키지 전부를 스캔
  • 예: hello.core.AutoAppConfig에 붙어 있으면, hello.core, hello.core.member, hello.core.order 등 전부 다 스캔.

 

basePackages를 쓰는 이유

1. 스캔 대상을 명확히 제한하고 싶을 때

@ComponentScan(basePackages = "hello.core.member")
  • 이렇게 하면 member 패키지만 스캔하므로, 불필요한 다른 클래스들이 스프링 빈으로 등록되는 걸 막을 수 있음
  • 앱이 커질수록 범위를 좁히는 게 유지보수에 유리

2. 여러 개의 시작 위치도 가능

@ComponentScan(basePackages = {"hello.member", "hello.order"})
  • 두 개 이상의 경로를 지정할 수도 있음

예시로 보기

src/ └─ hello/core/ ├─ AutoAppConfig.java ← @ComponentScan(basePackages="hello.core.member") ├─ member/ │ └─ MemberServiceImpl.java (@Component) └─ order/ └─ OrderServiceImpl.java (@Component)
  • 위 구조에서 basePackages가 "hello.core.member"이면
    • MemberServiceImpl은 스캔됨 ✅
    • OrderServiceImpl은 무시됨 ❌