본 글은 백기선님의 스프링부트 개념과 활용강좌를 수강하며 정리한 내용입니다.
@SpringBootApplication은 Spring Boot의 자동설정, 즉 Bean객체를 등록하기 위해 설정한 어노테이션이다.
그 활용은 보통 스프링부트 어플리케이션을 실행하는 Class에 등록해 놓으며 다음과 같이 활용된다.
package web.ecoveloper.springinit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
그렇다면, @SpringBootApplication는 어떻게 스프링빈객체를 생성할까?
@SpringBootApplication의 내부를 보면 다음과 같은 설정이 되어있다.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
여기서 눈여겨 볼 어노테이션은 @ComponentScan과 @EnableAutoConfiguration이다.
이 두가지 어노테이션 역시 빈객체의 생성을 담당하는 어노테이션이며, 위의 순서대로 빈객체를 생성한다.
@ComponentScan은 등록된 클래스가 속해있는 패키지를 포함한 하위 패키지를 스캔하여 다음과 같은 어노테이션이 입력되어 있는 클래스를 빈객체로 생성한다.