스프링은 설정 정보 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다.
이전에는 스프링 빈을 등록할 때 자바 코드의 @Bean
or XML
등의 설정 정보에 등록할 스프링 빈들을 직접 작성했었다.
이렇게 수작업으로 등록하게 되면 설정 정보가 커지고, 누락하는 등 다양한 문제가 발생할 수 있다.
@ComponentScan
은 @Component
가 붙은 모든 클래스를 스프링 빈으로 등록해주기 때문에 설정 정보에 붙여주면 된다.
의존관계도 자동으로 주입하는 @Autowired
기능도 제공한다.
컴포넌트 스캔을 사용하면 @Configuration
이 붙은 설정 정보도 자동으로 등록된다.
@Configuration
이 붙은 설정 정보가 자동 등록되는 이유는 @Configuration
코드에 @Component
애너테이션이 붙어있기 때문이다.
DependencyConfig 등 @Configuration 설정이 된 파일이 있을 시 아래와 같이 코드 (excludeFIlters ~) 추가 :
@ComponentScan(excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class))
탐색할 패키지의 시작 위치를 지정하고, 해당 패키지부터 하위 패키지 모두 탐색한다.
@ComponentScan()
의 매개변수로 basePackages = “”를 줄 수 있다.
지정하지 않으면, @ComponentScan
이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.
스프링 부트를 사용하면 @SpringBootApplication
을 이 프로젝트 시작 루트 위치에 두는 것이 추천된다.
@Component : 컴포넌트 스캔에서 사용된다.
@Controller & @RestController : 스프링 MVC 및 REST 전용 컨트롤러에서 사용된다.
@Service : 스프링 비즈니스 로직에서 사용된다.
@Repository : 스프링 데이터 접근 계층에서 사용된다.
@Configuration : 스프링 설정 정보에서 사용된다.
해당 클래스의 소스 코드에는 @Component를 포함하고 있다.
includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.
FilterType 옵션
기본값
, 애너테이션으로 인식해서 동작한다.TypeFilter
라는 인터페이스를 구현해서 처리한다.