반응형
ComponentScan의 탐색 위치와 기본 스캔 대상
@ComponentScan(basePackages = {"hello.test1", "hello.test2"})
- 지정하는 패키지의 하위 패키지만을 스캔한다.
- 지정 하지 않으면 현재 위치 패키지의 하위 패키지를 다 스캔하기 때문에 필요하다면 지정한다.
- 즉, @ComponentScan이 붙은 설정 정보 클래스의 패키지가 스캔의 시작 위치가 됨.
- 위 예시는 hello/text1 패키지와 test2 패키지의 하위 패키지만을 스캔
- 권장 방법은 애초에 구성 설정 클래스는 프로젝트를 대표하는 정보이므로, 프로젝트 시작 root에 위치 시켜 놓고,
- bassPackages 지정은 생략하는 것이 최근 관례
@SpringBootApplication
- SpringBoot 프로젝트 생성 시에 이 에너테이션이 붙은 클래스가 하나 생긴다.
- 이 클래스는 스프링 부트의 대표 시작 정보를 알리는 클래스이며, 이 것은 프로젝트 시작 루트 위치에 두는 것이 관례이다.
- 이 에너테이션 소스코드를 열어보면 @ComponentScan이 포함되어 있음.
컴포넌트 스캔 기본 대상
- @Component
- @Controller
- @Service
- @Repository
- @Configuration
*참고* 에너테이션에는 상속 관계라는 개념이 없음. 그러나 가끔 에너테이션의 소스코드를 까보면
- 다른 에너테이션을 들고 있는 것을 볼 수 있는데 이것은 자바가 지원하는 것이 아닌 스프링이 지원하는 기능이다.(따라서, 자바의 상속 개념과 연관지으면 안됨.)
- 컴포넌트 스캔의 기본 대상이 되는 에너테이션들의 소스코드를 까보면 @Component 에너테이션을 포함하고 있는 것을 알 수 있다.
- 즉, 위 컴포넌트 스캔 기본 대상의 에너테이션에는 내부적으로 @Component 에너테이션을 포함하고 있어 ComponentScan의 기본대상이 될 수 있었던 것이다.
반응형
'Backend > Spring(이론)' 카테고리의 다른 글
스프링 - Controller에서 요청 데이터 받기 (0) | 2024.03.09 |
---|---|
서블릿(Servlet), WAS (0) | 2024.01.29 |
Spring / 컴포넌트 스캔에서 빈을 중복으로 등록하는 상황과 충돌 (0) | 2023.10.17 |
Spring / 컴포넌트 스캔과 의존관계 자동 주입 (ComponentScan) (2) | 2023.10.17 |
Spring / 의존성 주입(생성자 주입이 권장되는 이유) (0) | 2023.10.17 |