본 글은 백기선님의 스프링부트 개념과 활용강좌를 수강하며 정리한 내용입니다.

@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

@ComponentScan은 등록된 클래스가 속해있는 패키지를 포함한 하위 패키지를 스캔하여 다음과 같은 어노테이션이 입력되어 있는 클래스를 빈객체로 생성한다.

@EnableAutoConfiguration