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

SpringBoot 自動配置的八個寶藏技巧

開發
本文我們分析了 Spring Boot 2.x 自動配置的 8個寶藏技巧,通過一系列智能的條件判斷、依賴管理和配置文件支持,Spring能夠根據項目的實際需求自動裝配所需的組件和 Bean。

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

1. 核心注解:@EnableAutoConfiguration

自動配置的啟用主要通過 @EnableAutoConfiguration 注解實現,通常,這個注解被包含在 @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 注解會觸發 AutoConfigurationImportSelector,它會讀取 spring.factories 文件中 org.springframework.boot.autoconfigure.EnableAutoConfiguration 鍵對應的所有自動配置類,并將其導入到應用上下文中。

示例 spring.factories 內容:

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() {
        // 創建并返回默認的數據源
    }
}

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

4. 自動配置的優先級與覆蓋

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

  • 自定義 Bean:如果開發者在上下文中定義了某個 Bean,而自動配置類又嘗試定義同類型的 Bean,通常開發者自定義的 Bean 會優先于自動配置的 Bean。
  • 排除自動配置:可以在 @SpringBootApplication 或 @EnableAutoConfiguration 注解中使用 exclude 屬性來排除特定的自動配置類。
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication { ... }
  • 配置屬性:通過在 application.properties 或 application.yml 中設置特定的配置屬性,可以啟用、禁用或自定義自動配置的行為。

5. SpringBoot Starter

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

常見的 Starter 示例:

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

6. AutoConfigurationImportSelector 與組裝自動配置

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

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

7. 調試與診斷自動配置

Spring Boot 提供了一些工具和特性,幫助開發者理解和調試自動配置:

  • **spring-boot-starter-actuator**:包含的 auto-configure 端點可以展示應用的自動配置報告。
  • @EnableAutoConfiguration 的 report 日志:在啟動日志中顯示哪些自動配置被應用或被排除。
  • spring.autoconfigure.exclude 屬性:可以在配置文件中指定要排除的自動配置類。

8. 自定義自動配置

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

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

  • 創建自動配置類:使用 @Configuration 和適當的 @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
  • 發布 Starter:將自動配置類打包在一個 Starter 中,供其他項目引入使用。

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

9. 總結

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

責任編輯:趙寧寧 來源: 猿java
相關推薦

2012-10-29 11:01:17

2022-12-15 16:38:17

2010-08-25 11:14:05

云安全數據安全網絡安全

2022-05-30 00:04:16

開源Github技巧

2025-02-07 15:01:49

Promise數組前端

2023-10-24 09:25:23

IT技巧文化

2024-04-01 07:51:49

Exclude?工具類型TypeScript

2024-01-02 16:16:34

Promise前端

2024-03-06 13:56:00

項目awaitpromise

2024-03-21 09:58:27

ExtractTypeScript工具類型

2025-05-09 09:26:12

2011-09-25 10:46:18

云計算安全

2010-09-09 13:44:06

DIVCSS

2010-08-11 16:43:05

職場

2023-01-03 11:47:47

2023-11-27 16:01:59

JavaScrip技巧

2024-06-27 10:45:27

2021-11-19 10:40:14

物聯網物聯網安全IoT

2023-09-26 12:04:15

重構技巧Pythonic

2023-01-11 11:35:40

重構PythonPythonic
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩一区二区在线观看 | 在线播放国产视频 | 久久九九99 | 日韩不卡视频在线 | 久久久91精品国产一区二区三区 | 国产精品毛片无码 | 一区在线视频 | 欧美精品在线播放 | 亚洲成人精品在线观看 | 日韩美女在线看免费观看 | 成人网在线看 | 日日草天天干 | 国产欧美日韩一区 | 国产最好的av国产大片 | 欧美久久一区二区三区 | 成人三级在线观看 | 日韩在线免费看 | 国产精品亚洲视频 | 久久综合九色综合欧美狠狠 | 男女激情网站免费 | 91人人视频在线观看 | 免费成人毛片 | 色嗨嗨| 亚洲人成人网 | 欧美成人一区二区 | 日批免费看 | 国产91亚洲精品一区二区三区 | 中文久久| 成人污污视频 | 精品久久久久国产免费第一页 | 日韩精品欧美精品 | 99在线免费视频 | 精品久久国产老人久久综合 | 蜜桃黄网| 99久久成人 | 午夜在线视频 | 国产精品区二区三区日本 | 亚洲天堂成人在线视频 | av免费入口| 999久久久久久久久 国产欧美在线观看 | 国产精品国产三级国产aⅴ中文 |