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은 무시됨 ❌