스프링부트의 자동설정
스프링 부트에서는 어떻게 스프링에서 오래 걸렸던 초반 환경설정 없이 바로 동작이 가능한 것일까?
spring initializr를 통해 프로젝트를 생성하면 main 클래스에 @SpringBootApplication 어노테이션을 볼 수 있다.
@SpringBootApplication
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
이 어노테이션을 살펴보면 다양한 어노테이션들이 붙어있다.
@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 {
...
@Target, @Retention, @Documented, @Inherited는 메타 어노테이션이라고 하여 이를 이용하여 커스텀한 어노테이션을 만들 수 있다.
@SpringBootConfiguration는 spring boot에서 사용되는 설정파일임을 알려준다.
@ComponentScan은 Component를 가진 하위 패키지 클래스들을 빈으로 등록해준다.
@EnableAutoConfiguration은 auto configuration을 사용하겠다는 뜻으로 spring-boot-autoconfigure 프로젝트의 meta 파일을 읽어서 정의되어있는 Configuration들을 빈으로 등록해준다.
- META-INF/spring.factories에 다양한 설정들이 정의되어있다.
# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener
# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
...
그리고 이 AutoConfiguration 클래스들을 가보면 @ConditionalOnMissingBean이나 @ConditionalOnProperty처럼 언제 등록될지에 대한 정보를 가지고 있어 조건에 맞게 빈을 등록하게 된다.
이처럼 spring boot는 @ComponentScan으로 패키지를 스캔하여 빈을 등록한 다음 @EnableAutoConfiguration으로 사전에 정의한 AutoConfiguration들을 빈으로 등록한다.
'프로그래밍 > Spring' 카테고리의 다른 글
Errors나 BindingResult사용시 주의할 점 (0) | 2020.08.09 |
---|---|
스프링 부트의 오류처리(Error Handling) (0) | 2020.07.05 |
스프링 AOP (0) | 2020.04.19 |
빈의 스코프 (0) | 2020.03.18 |
애노테이션(Annotation을 이용한 의존객체 주입 (0) | 2020.03.15 |