最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot Starter 自動裝配原理全解析

 更新時間:2025年04月22日 09:53:38   作者:葵續(xù)淺笑  
Spring Boot Starter 的核心設計理念是 約定優(yōu)于配置,其核心實現(xiàn)基于 自動配置(Auto-Configuration) 和 條件化注冊(Conditional Registration),這篇文章主要介紹了Spring Boot Starter 自動裝配原理全解析,需要的朋友可以參考下

Spring Boot Starter 的核心設計理念是 約定優(yōu)于配置,其核心實現(xiàn)基于 自動配置(Auto-Configuration)條件化注冊(Conditional Registration)。以下是其生效原理:

約定大于配置

通過預定義合理的默認行為和規(guī)范,減少開發(fā)者需要手動配置的步驟。比較顯著的變化就是減少XML配置。還有一些實際體現(xiàn)如下所示:

  • 項目結構約定
    • 默認目錄結構:如 src/main/java 存放代碼,src/main/resources 存放配置文件。
    • 配置文件命名application.propertiesapplication.yml 自動被加載,無需顯式指定路徑。
  • 自動配置(Auto-Configuration)
    • 條件化 Bean 注冊:根據(jù)類路徑依賴(如存在 DataSource 類)自動配置數(shù)據(jù)庫連接池
    • 默認參數(shù)值:如嵌入式 Tomcat 默認端口為 8080,無需手動指定。
  • Starter 依賴
    • 依賴聚合:引入 spring-boot-starter-web 即自動包含 Web 開發(fā)所需的所有依賴(如 Tomcat、Jackson、Spring MVC)。
    • 開箱即用:無需手動管理版本兼容性。
  • RESTful 路由映射
    • 注解驅(qū)動:通過 @GetMapping("/path") 即可定義接口,無需在 XML 中配置路由規(guī)則。

自動配置機制

觸發(fā)階段:@EnableAutoConfiguration

  • 應用啟動時,@SpringBootApplication 組合了 @EnableAutoConfiguration,觸發(fā)自動配置流程。
  • AutoConfigurationImportSelector 被調(diào)用,負責加載所有候選的自動配置類。
public String[] selectImports(AnnotationMetadata metadata) {
  // 1. 加載所有候選自動配置類
  List<String> configurations = getCandidateConfigurations();
  // 2. 去重、過濾、排序
  configurations = removeDuplicates(configurations);
  configurations = filter(configurations, autoConfigurationMetadata);
  return configurations.toArray(new String[0]);
}

加載與篩選:spring.factories

  • 加載所有候選配置類

從所有 META-INF/spring.factories 文件中讀取 EnableAutoConfiguration 對應的配置類。在 Spring Boot 3.x 中,自動配置類的加載方式從 spring.factories 過渡到 AutoConfiguration.imports,并引入了 ImportCandidates 類來處理這一變化。

  • 去重與過濾

移除重復的配置類,并通過條件注解(如 @ConditionalOnClass ,@ConditionalOnMissingBean ) 有選擇的保留當前環(huán)境的配置類。

  • @ConditionalOnClass:類路徑存在指定類時生效
  • @ConditionalOnMissingBean:容器中不存在指定 Bean 時生效
  • @ConditionalOnProperty:配置屬性匹配時生效

排序

根據(jù) @AutoConfigureOrder@AutoConfigureAfter 調(diào)整配置類的加載順序。

Bean 注冊

  • 篩選后的自動配置類被解析為標準的 @Configuration 類。
  • 每個配置類中的 @Bean 方法根據(jù)條件注解動態(tài)注冊 Bean 到 Spring 容器。

編寫自定義Spring Boot Starter

項目結構規(guī)劃

建議分為兩個模塊:

  • 自動配置模塊:包含核心邏輯和自動配置類(如 hello-spring-boot-autoconfigure)。
  • Starter模塊:空項目,僅作為依賴聚合(如 hello-spring-boot-starter)。
hello-spring-boot-starter-parent(父POM)
├── hello-spring-boot-autoconfigure(自動配置模塊)
└── hello-spring-boot-starter(Starter模塊)
hello-spring-boot-starter/
├── hello-spring-boot-autoconfigure/
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/com/example/autoconfigure/
│   │   │   │   ├── HelloAutoConfiguration.java
│   │   │   │   ├── HelloProperties.java
│   │   │   │   └── HelloService.java
│   │   │   └── resources/
│   │   │       └── META-INF/
│   │   │           └── spring.factories
│   │   └── test/
│   └── pom.xml
├── hello-spring-boot-starter/
│   └── pom.xml
└── pom.xml

創(chuàng)建自動配置模塊(hello-spring-boot-autoconfigure)

添加Maven依賴

<!-- pom.xml -->
<dependencies>
    <!-- Spring Boot 自動配置基礎依賴 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>3.1.5</version>
    </dependency>
    <!-- 可選:配置屬性處理 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <version>3.1.5</version>
        <optional>true</optional>
    </dependency>
</dependencies>

定義核心服務類

public class HelloService {
    private String message = "Hello, World!";  // 默認消息
    public String sayHello() {
        return message;
    }
    // Getter和Setter用于通過配置修改message
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
}

定義配置屬性類(可選)

@ConfigurationProperties(prefix = "hello")
public class HelloProperties {
    private String message = "Hello, World!";
    // Getter和Setter
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
}

編寫自動配置類

@Configuration
@EnableConfigurationProperties(HelloProperties.class)  // 啟用配置屬性
@ConditionalOnClass(HelloService.class)  // 當HelloService在類路徑時生效
public class HelloAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean  // 當用戶未自定義HelloService時生效
    public HelloService helloService(HelloProperties properties) {
        HelloService service = new HelloService();
        service.setMessage(properties.getMessage());
        return service;
    }
}

注冊自動配置

resources/META-INF/ 下創(chuàng)建 spring.factories 文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfigure.HelloAutoConfiguration

創(chuàng)建Starter模塊(hello-spring-boot-starter)

添加Maven依賴

<!-- pom.xml -->
<dependencies>
    <!-- 引入自動配置模塊 -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>hello-spring-boot-autoconfigure</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

使用自定義Starter

在應用中引入Starter依賴

<!-- 用戶項目的pom.xml -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>hello-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

在代碼中注入Bean

@RestController
public class HelloController {
    @Autowired
    private HelloService helloService;
    @GetMapping("/hello")
    public String hello() {
        return helloService.sayHello();
    }
}

自定義配置(可選)

application.properties 中修改消息:

hello.message=你好, Spring Boot!

到此這篇關于Spring Boot Starter 自動裝配原理的文章就介紹到這了,更多相關Spring Boot Starter 自動裝配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot2.x集成Dozer的示例代碼

    SpringBoot2.x集成Dozer的示例代碼

    本文主要介紹了SpringBoot2.x集成Dozer的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java?設計模式以虹貓藍兔的故事講解簡單工廠模式

    Java?設計模式以虹貓藍兔的故事講解簡單工廠模式

    簡單工廠模式是屬于創(chuàng)建型模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式,但不屬于23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定創(chuàng)建出哪一種產(chǎn)品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現(xiàn)
    2022-03-03
  • MybatisPlus之時間處理問題

    MybatisPlus之時間處理問題

    在數(shù)據(jù)庫設計時,阿里巴巴編碼規(guī)約建議使用gmt_create和gmt_modified命名時間字段,并設置為datetime類型,本文介紹了兩種自動填充時間字段的實現(xiàn)方式:SQL級別和代碼級別(使用MyBatis?Plus),SQL級別通過設置默認值和更新值為CURRENT_TIMESTAMP
    2024-09-09
  • 詳解Java停止線程的四種方法

    詳解Java停止線程的四種方法

    如何停止java的線程一直是一個困惱我們開發(fā)多線程程序的一個問題嗎,本文主要介紹了詳解Java停止線程的四種方法,感興趣的可以了解一下
    2021-05-05
  • Java二維數(shù)組實戰(zhàn)案例

    Java二維數(shù)組實戰(zhàn)案例

    這篇文章主要介紹了Java二維數(shù)組,結合具體案例形式分析了java二維數(shù)組定義、遍歷、計算等相關操作技巧,需要的朋友可以參考下
    2019-08-08
  • 如何理解SpringMVC

    如何理解SpringMVC

    Spring Web MVC是一種基于Java的實現(xiàn)了Web MVC設計模式的請求驅(qū)動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基于請求驅(qū)動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發(fā)
    2021-06-06
  • javaSE泛型、反射與注解的核心原理與實際應用

    javaSE泛型、反射與注解的核心原理與實際應用

    在日常開發(fā)中,必不可少的會使用到泛型,這篇文章主要介紹了javaSE泛型、反射與注解的核心原理與實際應用的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-08-08
  • Java經(jīng)典設計模式之適配器模式原理與用法詳解

    Java經(jīng)典設計模式之適配器模式原理與用法詳解

    這篇文章主要介紹了Java經(jīng)典設計模式之適配器模式,簡單說明了適配器模式的概念、原理,并結合實例形式分析了java適配器模式的用法與相關注意事項,需要的朋友可以參考下
    2017-08-08
  • Java效率提升神器jOOR

    Java效率提升神器jOOR

    這篇文章主要介紹了Java效率提升神器jOOR,jOOR是一個第三方庫,通過鏈式DSL接口,簡化了反射過程,更多相關內(nèi)容組要的朋友可以參考一下
    2022-07-07
  • java實現(xiàn)猜拳小游戲

    java實現(xiàn)猜拳小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)猜拳小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01

最新評論

丹寨县| 遂平县| 宁都县| 大连市| 宁波市| 新巴尔虎左旗| 靖安县| 仁化县| 卓尼县| 松桃| 六枝特区| 天全县| 洪雅县| 师宗县| 眉山市| 衢州市| 普洱| 凉山| 胶南市| 新民市| 石嘴山市| 冕宁县| 舞阳县| 乌兰浩特市| 临沧市| 闽清县| 天津市| 呼伦贝尔市| 扎囊县| 双流县| 万荣县| 彩票| 远安县| 宁夏| 工布江达县| 平安县| 忻州市| 寿光市| 隆化县| 高州市| 黄山市|