본문 바로가기
Backend/Spring(이론)

Spring / ComponentScan의 탐색 위치와 기본 스캔 대상

by 재성스 2023. 10. 17.
반응형

ComponentScan의 탐색 위치와 기본 스캔 대상

 

@ComponentScan(basePackages = {"hello.test1", "hello.test2"})

  • 지정하는 패키지의 하위 패키지만을 스캔한다.
  • 지정 하지 않으면 현재 위치 패키지의 하위 패키지를 다 스캔하기 때문에 필요하다면 지정한다.
  • 즉, @ComponentScan이 붙은 설정 정보 클래스의 패키지가 스캔의 시작 위치가 됨.
  • 위 예시는 hello/text1 패키지와 test2 패키지의 하위 패키지만을 스캔
  • 권장 방법은 애초에 구성 설정 클래스는 프로젝트를 대표하는 정보이므로, 프로젝트 시작 root에 위치 시켜 놓고,
  • bassPackages 지정은 생략하는 것이 최근 관례

@SpringBootApplication

  • SpringBoot 프로젝트 생성 시에 이 에너테이션이 붙은 클래스가 하나 생긴다.
  • 이 클래스는 스프링 부트의 대표 시작 정보를 알리는 클래스이며, 이 것은 프로젝트 시작 루트 위치에 두는 것이 관례이다.
  • 이 에너테이션 소스코드를 열어보면 @ComponentScan이 포함되어 있음.

컴포넌트 스캔 기본 대상

- @Component
- @Controller
- @Service
- @Repository
- @Configuration

*참고*  에너테이션에는 상속 관계라는 개념이 없음. 그러나 가끔 에너테이션의 소스코드를 까보면

  • 다른 에너테이션을 들고 있는 것을 볼 수 있는데 이것은 자바가 지원하는 것이 아닌 스프링이 지원하는 기능이다.(따라서, 자바의 상속 개념과 연관지으면 안됨.)
  •  컴포넌트 스캔의 기본 대상이 되는 에너테이션들의 소스코드를 까보면 @Component 에너테이션을 포함하고 있는 것을 알 수 있다. 
  • 즉, 위 컴포넌트 스캔 기본 대상의 에너테이션에는 내부적으로 @Component 에너테이션을 포함하고 있어 ComponentScan의 기본대상이 될 수 있었던 것이다.
반응형