자동 조립 원리 @SpringBootApplication
pom.xml
- spring-boot-dependencies 코어 종속성(상위 프로젝트)
- springboot 종속성을 도입할 때 버전(웨어하우스)을 지정할 필요가 없습니다.
발사통
<!--启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
springboot ==> 해당 런처의 모든 기능 시나리오
메인 프로그램
@SpringBootApplication //标注 springboot应用 启动类下的所有资源被导入
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
//通过反射加载该类的对象
SpringApplication.run(Springboot01HelloworldApplication.class, args);
}
}
두 개의 핵심 주석을 보고 찾으려면 클릭하세요.
@SpringBootConfiguration springboot 구성 주석
@EnableAutoConfiguration 자동 구성 주석
먼저 @SpringBootConfiguration springboot 구성 주석을 살펴보십시오.
@Configuration을 찾으려면 클릭하세요. 이것은 구성 클래스입니다.
그런 다음 실제로 스프링 구성 요소인 @Component를 클릭합니다.
@EnableAutoConfiguration 자동 구성 주석을 살펴보십시오.
자동 구성 패키지 주석 @AutoConfigurationPackage 발견
자동 구성 선택기 @Import({AutoConfigurationImportSelector.class})
자동 구성 패키지 주석 @AutoConfigurationPackage를 클릭하고 등록자 @Import({Registrar.class})를 가져왔는지 확인합니다.
그런 다음 자동 구성 선택기 @Import({AutoConfigurationImportSelector.class})를 클릭합니다. 이것이 핵심입니다.
환경, 클래스 로더, 리소스 로더 등을 정의합니다.
초점은 (구성자 엔터티의 자동 로드) getAutoConfigurationEntry() 메서드에 있습니다.
검색(후보 구성 확보) getCandidateConfigurations() 메서드를 추적합니다.
이 메서드는 로드된 모든 구성 메서드 SpringFactoriesLoader.loadFactoryNames()를 가져오고 두 메서드를 로드합니다.
protected Class<?> getSpringFactoriesLoaderFactoryClass() {
return EnableAutoConfiguration.class;
}
그리고 springboot의 메인 시작 클래스 @SpringBootApplication
자동 구성 주석 @EnableAutoConfiguration을 상속했습니다.
이렇게 큰 원을 돌고 나면 시작 클래스 아래의 모든 리소스를 가져오는 한 가지 작업을 수행합니다.
구성이 비어 있지 않으면 (자동 구성 코어 파일) META-INF/spring.factories로 이동하여 구성 파일을 찾습니다.
그러나 버전 2.7의 springboot 자동 구성 파일은
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
그러나 spring.factories는 계속 사용할 수 있으며 향후 폐지될 수 있습니다.
이제 구성 파일을 SpringFactoriesLoader.loadFactoryNames에 로드하는 방법을 살펴봅니다.
이 방법은 핵심 구성 파일 META-INF/spring.factories 또는 시스템 파일에서 루프의 구성 파일에 있는 모든 구성을 가져와 이를 트래버스하고 사용을 위해 속성으로 캡슐화하는 것입니다.
참고: springboot의 모든 자동 구성은 시작 시 스캔 및 로드되며 spring.factories의 모든 자동 구성 클래스가 포함됩니다.해당 스타터를 가져오고 조건(@ConditionalOnXXX)이 충족되어야만 자동 구성이 적용됩니다. .