@SpringBootApplication
- 메인 어플리케이션 클래스에 선언되는 어노테이션
- @SpringBootConfiguration + @ComponentScan + @EnableAutoConfiguration
스프링부트 어플리케이션은 빈 등록을 2번 수행
- @ComponentScan으로 등록하는 1단계
- @EnableAutoConfiguration으로 추가적인 빈을 등록하는 2단계
1단계 @ComponentScan
- @Component 어노테이션을 가진 클래스를 스캔해서 빈으로 등록
- 이 어노테이션이 선언된 위치부터, 모든 하위 패키지를 스캔
- Ex) @Configuration / @Controller / @Service / @Repository / @RestController
2단계 @EnableAutoConfiguration
- 스프링부트의 수많은 기본 의존성들을 설정해줌
- gradle을 통해 import한 spring-boot-autoconfigure의 META-INF에 들어있는 spring.factories 파일
=> org.springframework.boot.autoconfigure.EnableAutoConfiguration란 key는 수많은 configuration파일들을 value로 가지고 있다.
=> Ex) WebMvcAutoConfiguraiton Class = @Configuration = Bean을 등록하는 자바 설정 파일 - key에 선언된 value값들을 보고 수많은 클래스를 빈으로 등록함 (= AutoConfiguration의 대상)
주의할 점
- @EnableAutoConfiguraiton이 모든 클래스를 등록하는 건 아님
- @ConditionalOnWebApplication / @ConditionalOnClass / ...
- 조건에 따라 해당 클래스를 등록할 때도, 등록하지 않을 때도 있다.
- 해당 클래스를 등록하더라도, @Bean이 선언된 특정 메소드를 사용할 때도, 사용하지 않을 때도 있다.
설정 커스텀
- @EnableAutoConfiguration 대신 @Configuration을 사용하면 스프링부트 어플리케이션을 커스텀할 수 있다.
- Ex) 웹 어플리케이션이 아닌 타입으로 실행하면 정상적으로 실행됨 (서블릿 설정이 제외된 채로)
'학습 > Spring' 카테고리의 다른 글
[spring] 스프링부트의 내장 WAS 이해와 응용 (0) | 2020.04.08 |
---|---|
[spring] 스프링부트의 AutoConfiguration을 이용한 Bean 등록 (0) | 2020.04.06 |
[spring] 스프링부트 프로젝트 초기 세팅 시 빌드 툴의 이해 (maven, gradle) (0) | 2020.03.25 |
[spring] 스프링부트 프로젝트 초기 생성 및 구조 (gradle) (0) | 2020.03.23 |
[spring] 핵심3_Portable Service Abstraction (0) | 2020.03.22 |
댓글