[Spring Boot] Component Scan
Spring Boot에서 Hello, World라는 글자를 브라우저에 띄우고 싶다고 하자. 그러면 우리는 어떻게 실행시켜줘야 할까? HelloController가 아닌 MySteplyApplication을 run 시켜줄거다. 왜? 왜 글자가 있는 HelloController가 아니라 MySteplyApplication을 실행시킬까?
Spring Boot의 Component Scan
Spring Boot는 @SpringBootApplication 어노테이션이 붙은 클래스 기준으로, 하위 패키지에 있는 모든 Bean들을 자동으로 찾아 등록해준다. 이때 @SpringBootApplication 안에는 @ComponentScan이 숨어 있다.
@ComponentScan(basePackages = "com.example.mysteply")
이 뜻은 이 패키지와 그 하위에서 @Component, @RestController 등을 자동으로 찾아서 등록해줘이다. 그래서 별도로 명시하지 않아도, Spring이 알아서 등록해주고, 실행된 서버에서 요청을 처리할 수 있게 된 것이다.
❗️ @SpringBootApplication에는 @ComponentScan 말고도 추가적으로 설정된 어노테이션들이 있다. 알아두면 좋은 것들은 아래와 같다.
- @Configuration: @SpringBootApplication에 같이 있는 @SpringBootConfiguration은 @Configuration을 통해 @Bean을 생성하고 Spring Continer에 등록할 수 있다.
- @EnableAutoConfiguration: base package로 정의된 모든 Bean을 자동으로 구성한다. 그래서 가장 최상위 패키지에 선언된다.
Component Scan 범위
기본 방식
@ComponentScan(basePackages = "com.example")
여러 개 지정
@ComponentScan(basePackages = {"com.example.service", "com.lib.utils"})
특정 클래스 기준으로
@ComponentScan(basePackageClasses = {SomeClass.class})
수동 등록
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
}