ComponentScan

초보개발·2021년 12월 14일
0

Spring

목록 보기
16/37

탐색할 패키지의 시작 위치 지정

프로젝트에 속해있는 모든 클래스를 컴포넌트 스캔할 경우 많은 시간이 소요된다. 따라서 꼭 필요한 위치부터 검색할 수 있도록 시작 위치를 지정해 줄 수 있다.

@ComponentScan(
    basePackages = "hello.core",
)
  • basePackages는 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함해서 하위 패키지까지 모두 탐색한다.
    • 다수의 시작 위치 지정 : basePackages = {"hello.core", "hello.service"}
  • basePackageClasses는 지정한 클래스의 패키지를 탐색 시작 위로 지정한다.
  • 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.

    권장하는 방법
    패키지 위치를 지정하지 않고 설정 정보 클래스의 위치를 프로젝트의 최상단에 두는 것이 좋다. 스프링 부트도 이 방법을 기본으로 제공한다.
    참고로 스프링 부트를 사용하면 스프링 부트의 대표 시작 정보인 @SpringBootApplication을 이 프로젝트 시작 루트 위치에 두는 것이 관례라고 한다.
    (이 설정 안에 @ComponentScan이 포함되어 있다.)

컴포넌트 스캔 기본 대상

컴포넌트 스캔은 @Component이외에도 아래와 같은 내용도 추가로 포함된다.

  • @Component : 컴포넌트 스캔에서 사용
  • @Controller : Spring MVC Controller에서 사용
  • @Service : 스프링 비즈니스 로직에서 사용
  • @Repository : 스프링 데이터 접근 계층에서 사용
  • @Configuration : 스프링 설정 정보에서 사용

참고
애노테이션은 상속관계가 없으며, 지정된 애노테이션을 인식할 수 있는 것은 자바가 지원하는 기능이 아닌 스프링이 지원하는 기능이다.

컴포넌트 스캔 용도말고도 다른 스프링 부가 기능을 수행한다.

  • @Controller : Spring MVC Controller로 인식된다.
  • @Service : 특별한 처리를 하지 않지만 개발자가 핵심 비즈니스 로직이 여기겠구나 짐작할 수 있는데 도움이 된다.
  • @Repository : 스프링 데이터 접근 계층으로 인식하고 데이터 계층의 예외를 스프링 예외로 변환해준다.
  • @Configuration : 스프링 설정 정보로 인식되고 스프링 빈이 싱글톤을 유지할 수 있도록 추가 처리를 해준다.

0개의 댓글