스프링 부트에서 컴포넌트 스캔(@ComponentScan) 범위에 대하여..

Choizz·2023년 3월 8일
0

컴포넌트 스캔 범위

개인 포트폴리오 작업을 하다 예외 처리를 하려고 하는데 @RestControllerAdivce가 작동하지 않아서 한참을 헤맸습니다. 그런데, 알고보니 @SpringBootApplication 애노테이션이 있는 패키지 밖에다 예외 처리 클래스를 만들어 작동하지 않았던 것이었습니다.

이런 실수를 다시 반복하지 않고 기억하기 위해서, 이번 포스팅은 컴포넌트 스캔의 범위에 대해 포스팅하려고 합니다.


@ComponentScan

  • 위 애노테이션이 달려있으면, @Component(@Service, @Controller,...)가 달린 클래스들을 스캔해 빈으로 등록시켜 줍니다.
  • 스프링 부트로 프로젝트를 생성하면, @SpringBootApplication 안에 @Component 포함되어 있는 것을 확인할 수 있습니다.

그렇다면, 컴포넌트 스캔에 범위는 어떻게 될까요??

@CompoentScan(
	basePackages = "basic.server",
)
  • 위 코드 처럼, basePackages를 사용해 탐색할 패키지의 시작위치를 정할 수 있습니다. 그러면, 이 패키지를 포함한 하위 패키지를 모두 탐색해 @Component가 있는지를 확인합니다.
  • 만약 지정을 하지 않으면, @ComponetScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 됩니다.

    그래서 보통 제일 상위 패키지에 @SpringBootApplication이 붙은 클래스가 있습니다.( 스프링 부트 기본 설정)
    com.basic <- 제일 상위 패키지
    com.basic.service
    com.baseic.repository

따라서, 이 패키지 하위에 @Component가 붙은 클래스를 넣어야 빈으로 등록되어 정상적으로 스프링이 인식하게 됩니다.

혹시, 작동이 안될 때는 패키지 위치를 한 번 확인해 보는 것도 좋을 것 같습니다.!


@Import

  • 참고로 위 애노테이션을 사용하면, 컴포넌트 스캔의 범위 밖에 있어도, 스프링이 빈으로 등록합니다.
@Import(BasicConfig.class)
@SpringBootApplication
public class ....{
}

Reference

profile
집중

0개의 댓글