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

SpringBoot自動配置的8個技巧分享

 更新時間:2025年01月03日 08:28:26   作者:猿java  
在 SpringBoot 2.x中,一個很核心的功能是自動配置機制,這篇文章主要為大家詳細介紹了Spring Boot 2.x 實現(xiàn)自動配置的8個技巧,希望對大家有所幫助

在 SpringBoot 2.x中,一個很核心的功能是自動配置(Auto-Configuration)機制,這篇文章,我們來聊一聊 Spring Boot 2.x 實現(xiàn)自動配置的8個寶藏技巧,希望幫助你更好地掌握SpringBoot的自動配置原理。

1. 核心注解:@EnableAutoConfiguration

自動配置的啟用主要通過 @EnableAutoConfiguration 注解實現(xiàn),通常,這個注解被包含在 @SpringBootApplication 中:

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

@SpringBootApplication 等同于組合了以下三個注解:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

2. 自動配置類的注冊:spring.factories

Spring Boot 使用 spring.factories 文件(位于各個自動配置模塊的 META-INF 目錄下)來注冊所有的自動配置類。具體來說,@EnableAutoConfiguration 注解會觸發(fā) AutoConfigurationImportSelector,它會讀取 spring.factories 文件中 org.springframework.boot.autoconfigure.EnableAutoConfiguration 鍵對應的所有自動配置類,并將其導入到應用上下文中。

示例 spring.factories 內(nèi)容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfig.MyAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

3. 條件裝配:@Conditional 注解

自動配置類通常使用各種 @Conditional 注解來決定是否應用特定的配置。這些條件基于類路徑中的類、存在的 Bean、配置屬性等。常見的條件注解包括:

  • @ConditionalOnClass: 當指定的類存在于類路徑上時生效。
  • @ConditionalOnMissingBean: 當指定的 Bean 不存在時生效。
  • @ConditionalOnProperty: 當特定的配置屬性滿足條件時生效。
  • @ConditionalOnBean: 當指定的 Bean 存在時生效。

示例:

@Configuration
@ConditionalOnClass(DataSource.class)
@ConditionalOnMissingBean(DataSource.class)
public class DataSourceAutoConfiguration {

    @Bean
    public DataSource dataSource() {
        // 創(chuàng)建并返回默認的數(shù)據(jù)源
    }
}

上述配置表示:如果 DataSource 類在類路徑中存在,并且上下文中尚未定義 DataSource Bean,則自動配置一個默認的數(shù)據(jù)源。

4. 自動配置的優(yōu)先級與覆蓋

雖然自動配置會根據(jù)條件自動配置很多 Bean,但開發(fā)者可以通過以下方式覆蓋默認配置:

自定義 Bean:如果開發(fā)者在上下文中定義了某個 Bean,而自動配置類又嘗試定義同類型的 Bean,通常開發(fā)者自定義的 Bean 會優(yōu)先于自動配置的 Bean。

排除自動配置:可以在 @SpringBootApplication@EnableAutoConfiguration 注解中使用 exclude 屬性來排除特定的自動配置類。

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication { ... }

配置屬性:通過在 application.propertiesapplication.yml 中設置特定的配置屬性,可以啟用、禁用或自定義自動配置的行為。

5. SpringBoot Starter

Spring Boot Starter 是一組依賴描述符(通常是 Maven 或 Gradle 依賴),它們聚合了一組相關的依賴項。通過引入特定的 Starter,自動配置機制會檢測到相關的依賴,并根據(jù)需要應用相應的自動配置。

常見的 Starter 示例:

  • spring-boot-starter-web: 包含了構(gòu)建 Web 應用所需的依賴,如 spring-webmvc、Tomcat 等,并觸發(fā)相關的自動配置(如 DispatcherServlet、Tomcat 等)。
  • spring-boot-starter-data-jpa: 包含了 JPA 相關的依賴,并觸發(fā)數(shù)據(jù)源、JPA 實體管理器等的自動配置。

6. AutoConfigurationImportSelector 與組裝自動配置

AutoConfigurationImportSelector@EnableAutoConfiguration 背后的關鍵類。它負責讀取 spring.factories 文件中的自動配置類,并應用到 Spring 應用上下文中。流程如下:

  • 解析 spring.factories:讀取所有在 spring.factories 中注冊的自動配置類。
  • 評估條件:對于每個自動配置類,評估其 @Conditional 注解,決定是否應用該配置。
  • 導入配置類:將符合條件的自動配置類導入到應用上下文中。

7. 調(diào)試與診斷自動配置

Spring Boot 提供了一些工具和特性,幫助開發(fā)者理解和調(diào)試自動配置:

spring-boot-starter-actuator:包含的 auto-configure 端點可以展示應用的自動配置報告。

@EnableAutoConfigurationreport 日志:在啟動日志中顯示哪些自動配置被應用或被排除。

spring.autoconfigure.exclude 屬性:可以在配置文件中指定要排除的自動配置類。

8. 自定義自動配置

作為開發(fā)者,我們也可以創(chuàng)建自定義的自動配置類,以便在特定條件下自動配置特定的 Bean。

下面列舉了核心的 3個步驟:

創(chuàng)建自動配置類:使用 @Configuration 和適當?shù)?@Conditional 注解。

@Configuration
@ConditionalOnClass(MyService.class)
public class MyServiceAutoConfiguration {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

spring.factories 中注冊:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfig.MyServiceAutoConfiguration

發(fā)布 Starter:將自動配置類打包在一個 Starter 中,供其他項目引入使用。

通過上面 3個核心步驟,當我們在啟動SpringBoot容器時,自定義的類就會被自動配置,實現(xiàn)我們要達到的預期。

9. 總結(jié)

本文,我們分析了 Spring Boot 2.x 自動配置的 8個寶藏技巧,通過一系列智能的條件判斷、依賴管理和配置文件支持,Spring能夠根據(jù)項目的實際需求自動裝配所需的組件和 Bean。這極大地簡化了 Spring 應用的配置過程,使得開發(fā)者能夠更專注于業(yè)務邏輯的實現(xiàn),而無需關心繁瑣的配置細節(jié)。

到此這篇關于SpringBoot自動配置的8個技巧分享的文章就介紹到這了,更多相關SpringBoot自動配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mybatisPlus中批量刪除的示例代碼

    mybatisPlus中批量刪除的示例代碼

    本文主要介紹了mybatisPlus中批量刪除的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 創(chuàng)建并運行一個java線程方法介紹

    創(chuàng)建并運行一個java線程方法介紹

    這篇文章主要介紹了創(chuàng)建并運行一個java線程,涉及線程代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Spring?Boot項目優(yōu)雅上線之日志、監(jiān)控、異常處理最佳實踐指南

    Spring?Boot項目優(yōu)雅上線之日志、監(jiān)控、異常處理最佳實踐指南

    要讓Spring Boot項目優(yōu)雅、穩(wěn)健地上線并持續(xù)高效運行,日志、監(jiān)控、異常處理就是那不可或缺的 儀表盤、導航和故障預警系統(tǒng),是我們必須重視的關鍵環(huán)節(jié),這篇文章主要介紹了Spring?Boot項目優(yōu)雅上線之日志、監(jiān)控、異常處理最佳實踐指南的相關資料,需要的朋友可以參考下
    2026-05-05
  • java 避免出現(xiàn)NullPointerException(空指針)的方法總結(jié)

    java 避免出現(xiàn)NullPointerException(空指針)的方法總結(jié)

    這篇文章主要介紹了java 避免出現(xiàn)NullPointerException(空指針)的方法總結(jié)的相關資料,需要的朋友可以參考下
    2017-09-09
  • java分頁之假分頁實現(xiàn)簡單的分頁器

    java分頁之假分頁實現(xiàn)簡單的分頁器

    這篇文章主要介紹了java分頁之假分頁實現(xiàn)簡單的分頁器的相關資料,需要的朋友可以參考下
    2016-04-04
  • Java中的ArrayList類常用方法和遍歷

    Java中的ArrayList類常用方法和遍歷

    這篇文章主要介紹了Java中的ArrayList類常用方法和遍歷,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 一次踩坑記錄 @valid注解不生效 排查過程

    一次踩坑記錄 @valid注解不生效 排查過程

    這篇文章主要介紹了一次踩坑記錄 @valid注解不生效 排查過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • IDEA2022版本創(chuàng)建maven?web項目的兩種方式詳解

    IDEA2022版本創(chuàng)建maven?web項目的兩種方式詳解

    創(chuàng)建maven?web項目有兩種方式,一種是使用骨架方式,一種是不使用骨架的方式,本文結(jié)合實例代碼給大家介紹了IDEA2022版本創(chuàng)建maven?web項目的兩種方式,需要的朋友可以參考下
    2023-02-02
  • Java中File類方法詳解以及實踐

    Java中File類方法詳解以及實踐

    Java File類的功能非常強大,利用java基本上可以對文件進行所有操作,下面這篇文章主要給大家介紹了關于Java中File類方法以及實踐的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • SpringBoot集成Validation參數(shù)校驗

    SpringBoot集成Validation參數(shù)校驗

    這篇文章主要為大家詳細介紹了SpringBoot集成Validation參數(shù)校驗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

台南市| 新乡县| 汉寿县| 吐鲁番市| 霞浦县| 时尚| 平阴县| 时尚| 诸城市| 新乡市| 运城市| 阿图什市| 平阳县| 吉首市| 七台河市| 凤翔县| 越西县| 沭阳县| 滨州市| 璧山县| 甘南县| 卢氏县| 锦屏县| 中阳县| 滁州市| 靖安县| 丰台区| 南城县| 曲沃县| 凤冈县| 蒙自县| 游戏| 玉田县| 泸西县| 睢宁县| 峨眉山市| 姚安县| 新疆| 扎兰屯市| 天水市| 宜川县|