[원리] 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