웹 프로그래밍/[ Spring Boot ]

[ SpringBoot] 00. @SpringBootApplication Annotaion

kim.svadoz 2021. 10. 12. 16:50
반응형

@SpringBootApplication

스프링부트 템플릿을 통해 프로젝트를 생성하면 아래와 같이 자동으로 xxxApplication에 메인메소드가 생성이 된다.

@SpringBootApplication
public class FileDbWorkApplication {

    public static void main(String[] args) {
        SpringApplication.run(FileDbWorkApplication.class, args);
    }

}

그 곳에 @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

@SpringBootApplication 어노테이션이 붙은, 즉 컴포넌트 스캔이 선언된 하위 패키지에서

@Component @Configuration @Controller @RestController @Service @Repository

와 같은 Annotation이 선언된 클래스를 스프링 컨테이너의 메모리로 읽어와 애플리케이션에서 사용할 수 있는 Bean 형태로 등록하게 된다.

@EnableAutoConfiguration

컴포넌트 스캔 이후 EnableAUtoConfiguration으로 추가적인 Bean들을 읽어서 등록한다.

spring.factories 내부에 여러 Configuration들이 있고, 조건에 따라서 Bean을 등록한다.

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
...
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
...

org.springframework.boot.autoconfigure.EnableAutoConfiguration라는 Key 값으로 많은 Class를 가지고 있다. 해당 클래스들은 상단에 @Configuration이라는 Annotation을 가지고 있어 이러한 키값을 통해 명시된 많은 클래스들이 AutoConfiguration의 대상이 된다.

반응형