成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

硬核解析!Spring Boot 3.4 啟動原理全揭秘,細節拉滿!

開發 前端
理解 Spring Boot 的啟動機制不僅能幫助開發者更高效地排查問題,還能在面對面試或架構設計時提供更強的技術支撐。Spring Boot 3.4 的自動化配置機制雖然復雜,但掌握其核心原理后,我們就可以更自由地擴展 Spring Boot 的能力,如自定義 Starter、優化應用性能等。?

Spring Boot 作為 Java 生態中的核心框架,已經徹底改變了 Java Web 開發的方式。它通過 "約定優于配置" 和強大的自動化配置能力,大幅提升了開發效率。然而,盡管 Spring Boot 被廣泛使用,很多開發者在實際應用中只是停留在表層使用,而沒有深入理解它的底層實現。例如,在面試或架構設計討論中,Spring Boot 啟動原理往往是考察點之一,但很多人對其核心機制了解不深。

本篇文章將帶你深入剖析 Spring Boot 3.4 的啟動流程,解析 @SpringBootApplication、@EnableAutoConfiguration 及其背后的自動化配置機制,幫助你構建對 Spring Boot 的深層次認知。

@SpringBootApplication 注解解析

要理解 Spring Boot 的自動化配置,必須先從 @SpringBootApplication 注解入手,它是整個 Spring Boot 啟動過程的起點。先來看其源碼:

@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@interfaceSpringBootApplication{
}

該注解實際上是多個注解的組合:

  • @SpringBootConfiguration:標識該類為 Spring Boot 配置類。
  • @EnableAutoConfiguration:啟用自動化配置(核心)。
  • @ComponentScan:自動掃描當前包及子包下的 Spring 組件。

其中,@EnableAutoConfiguration 是 Spring Boot 自動化配置的關鍵,我們接下來重點分析它的實現。

@EnableAutoConfiguration 的實現機制

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}

這里的 @Import(AutoConfigurationImportSelector.class) 是關鍵,它會導入 AutoConfigurationImportSelector,進而加載各種自動化配置類。

AutoConfigurationImportSelector 解析

@Override
public void process(AnnotationMetadata annotationMetadata, DeferredImportSelector deferredImportSelector) {
    Assert.state(deferredImportSelector instanceof AutoConfigurationImportSelector,
        () -> String.format("Only %s implementations are supported, got %s",
            AutoConfigurationImportSelector.class.getSimpleName(),
            deferredImportSelector.getClass().getName()));


    AutoConfigurationEntry autoConfigurationEntry = ((AutoConfigurationImportSelector) deferredImportSelector)
        .getAutoConfigurationEntry(annotationMetadata);
    this.autoConfigurationEntries.add(autoConfigurationEntry);


    for (String importClassName : autoConfigurationEntry.getConfigurations()) {
        this.entries.putIfAbsent(importClassName, annotationMetadata);
    }
}

該方法的核心作用是解析 AutoConfigurationImportSelector 并獲取 AutoConfigurationEntry,最終將自動化配置類注冊到 Spring 容器中。

getAutoConfigurationEntry 方法分析

protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
    if (!isEnabled(annotationMetadata)) {
        return EMPTY_ENTRY;
    }


    AnnotationAttributes attributes = getAttributes(annotationMetadata);
    List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
    configurations = removeDuplicates(configurations);
    Set<String> exclusions = getExclusions(annotationMetadata, attributes);
    checkExcludedClasses(configurations, exclusions);
    configurations.removeAll(exclusions);
    configurations = getConfigurationClassFilter().filter(configurations);
    fireAutoConfigurationImportEvents(configurations, exclusions);


    return new AutoConfigurationEntry(configurations, exclusions);
}

該方法執行了如下關鍵步驟:

  1. 通過 getCandidateConfigurations 方法獲取所有候選自動化配置類。
  2. 過濾掉重復項,并移除 exclusions 中排除的配置類。
  3. 觸發自動化配置導入事件。

getCandidateConfigurations 方法

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
    List<String> configurations = new ArrayList<>(
        SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()));
    ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).forEach(configurations::add);


    Assert.notEmpty(configurations,
        "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you " +
            "are using a custom packaging, make sure that file is correct.");


    return configurations;
}

這里的自動化配置類來源有兩個:

  1. META-INF/spring.factories 文件:用戶自定義的 starter 會在這里聲明自動化配置類。
  2. META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件:Spring Boot 內置的自動化配置類。

如果這兩個地方都沒有找到自動化配置類,將會拋出異常。

Spring Boot 3.4 啟動機制總結

Spring Boot 3.4 的啟動流程依賴于 @EnableAutoConfiguration 及其背后的 AutoConfigurationImportSelector 機制,核心原理如下:

  1. @SpringBootApplication 觸發 @EnableAutoConfiguration 機制。
  2. @EnableAutoConfiguration 通過 AutoConfigurationImportSelector 解析并加載 META-INF/spring.factories 或 AutoConfiguration.imports 中定義的自動化配置類。
  3. 解析后的自動化配置類注冊到 Spring 容器,完成自動配置。

結論

理解 Spring Boot 的啟動機制不僅能幫助開發者更高效地排查問題,還能在面對面試或架構設計時提供更強的技術支撐。Spring Boot 3.4 的自動化配置機制雖然復雜,但掌握其核心原理后,我們就可以更自由地擴展 Spring Boot 的能力,如自定義 Starter、優化應用性能等。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-04-29 07:44:26

配置校驗機制

2019-11-15 15:12:19

Windows激活KMS

2025-03-26 01:25:00

Spring開發JSON

2025-04-27 04:00:00

錯誤頁Spring底層

2010-03-03 13:43:46

Android手機系統

2025-04-16 10:03:40

開發Spring應用程序

2024-12-03 10:46:48

Spring優化開發

2018-05-30 15:10:24

Spring BootList類型

2025-02-26 13:00:00

SpringBootJava開發

2023-09-27 08:14:56

2023-12-14 13:28:00

Spring流程Web

2025-04-07 03:00:00

SpringBoot數據庫

2025-02-13 07:45:26

APISpringHTTP

2021-09-13 09:40:35

Webpack 前端HMR 原理

2025-05-29 08:35:00

Nacos服務注冊開發

2014-09-18 10:29:37

APTAPT攻擊組織Pitty Tiger

2023-06-02 16:24:46

SpringBootSSM

2024-12-16 08:10:00

Spring開發

2025-06-19 09:53:30

Spring性能優化服務器

2021-06-09 08:50:39

C語言關機代碼復雜代碼解讀
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: h视频在线免费观看 | 二区欧美 | 色婷婷综合网 | 亚洲精品一区二区三区在线观看 | 亚洲福利视频网 | 国产精品久久久久久久久久久久午夜片 | 国产a爽一区二区久久久 | 狠狠的干 | 亚洲成人精品 | 欧美xxxx黑人又粗又长 | 久久99精品久久久久久 | 狠狠久| 91精品国产综合久久婷婷香蕉 | 一区二区三区欧美在线观看 | 日韩字幕 | 拍拍无遮挡人做人爱视频免费观看 | 国产一区二区久久 | 一级片在线免费看 | 亚洲二区视频 | 欧美一区永久视频免费观看 | 91香蕉嫩草 | 黑人成人网 | 欧美国产精品一区二区 | 香蕉视频久久久 | 天天看天天操 | 91精品久久久久久久久中文字幕 | 国产精品视频一区二区三区不卡 | 国产传媒在线观看 | 亚洲小说图片 | 亚洲精品一区二区三区蜜桃久 | 国产精品一区在线观看 | 国产成人精品一区二区三区 | 日韩欧美一区二区三区四区 | 在线日韩不卡 | 黄免费观看视频 | 99精品国产一区二区三区 | 国产精品成人久久久久 | 久久久久久久久久久一区二区 | 亚洲成av人片在线观看 | 欧美日韩一区二区三区四区五区 | 欧美日韩亚洲国产综合 |