on
[원리] 2. 자동 설정
[원리] 2. 자동 설정
@SpringBootApplication
@SpringBootApplication 어노테이션은 아래 3가지 어노테이션을 포함하고 있다.
@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration
이 중 @ComponentScan, @EnableAutoConfiguration에 의해 bean을 읽어오게 되며,
@ComponentScan > @EnableAutoConfiguration 순서로 bean을 읽어온다.
@ComponenetScan @ComponentScan이 달려있는 하위의 모든 패키지에서
- @Component 어노테이션을 가진 클래스들을 스캔해서 빈으로 등록
- @Configuration, @Repository, @Service, @Controller, @RestController 도 등록 @EnableAutoConfiguration Spring Meta 파일을 읽어 빈으로 등록
- org.springframework.boot.autoconfiguration.EnableAutoConfiguration
- maven > spring-boot-autoconfigure > META-INF > spring.factories
EnableAutoConfiguration은 위와 같이 EnableAutoConfiguration 하위의 Configuration 정보들을 bean으로 등록하는데,
모든 Configuartion 파일들이 항상 bean으로 등록되는 것이 아니라 @ConditionalOnXX 와 같은 어노테이션으로 인해 특정 조건에 만족했을 때만 bean으로 등록된다.
예를 들어, WebMvcAutoConfiguration 설정파일을 보면
ConditionalOnWebApplication(type = Type.SERVLET) 어노테이션에 의해, 웹 어플리케이션 타입이 SERVLET 인 경우에 bean으로 등록되게 된다.
* 정리하면 *
@SpringBootApplication 어노테이션은 3가지의 어노테이션으로 구성되어있다. "@SpringConfiguration" "@ComponentScan" "@EnableAutoConfiguration" spring은 2단계로 나눠 빈을 등록하는데, ComponenetScan > EnabledAutoConfiguration 순으로 각 어노테이션이 불러오는 빈들을 등록한다. @EnabledAutoConfiguration 같은 경우, META-INF > spring.facotreis에서 EnableAutoConfiguration 키로 등록된 configuration들을 configuration으로 읽어 빈으로 등록하며, 각 Configuration은 ConditionXX라는 어노테이션이 붙어있는 경우도 있는데, 이는 해당 조건에 만족할 때만, AutoConfiguration이 Configuration으로 읽어들인다.
from http://syleee.tistory.com/76 by ccl(A) rewrite - 2021-12-18 21:01:48