학습 블로그: [SpringBoot] @SpringBootApplication 자동 조립 원리

자동 조립 원리 @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)이 충족되어야만 자동 구성이 적용됩니다. .

추천

출처blog.csdn.net/Aurinko324/article/details/125353992