偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SpringBoot 自動(dòng)配置的八個(gè)寶藏技巧

開(kāi)發(fā)
本文我們分析了 Spring Boot 2.x 自動(dòng)配置的 8個(gè)寶藏技巧,通過(guò)一系列智能的條件判斷、依賴管理和配置文件支持,Spring能夠根據(jù)項(xiàng)目的實(shí)際需求自動(dòng)裝配所需的組件和 Bean。

在 SpringBoot 2.x中,自動(dòng)配置機(jī)制是一個(gè)很核心的功能,這篇文章,我們來(lái)聊一聊 Spring Boot 2.x 實(shí)現(xiàn)自動(dòng)配置的 8個(gè)寶藏技巧,希望幫助你更好地掌握 SpringBoot自動(dòng)配置原理。

1. 核心注解:@EnableAutoConfiguration

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

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

@SpringBootApplication 等同于組合了以下三個(gè)注解:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

2. 自動(dòng)配置類的注冊(cè):spring.factories

Spring Boot 使用 spring.factories 文件(位于各個(gè)自動(dòng)配置模塊的 META-INF 目錄下)來(lái)注冊(cè)所有的自動(dòng)配置類。具體來(lái)說(shuō),@EnableAutoConfiguration 注解會(huì)觸發(fā) AutoConfigurationImportSelector,它會(huì)讀取 spring.factories 文件中 org.springframework.boot.autoconfigure.EnableAutoConfiguration 鍵對(duì)應(yīng)的所有自動(dòng)配置類,并將其導(dǎo)入到應(yīng)用上下文中。

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

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

3. 條件裝配:@Conditional 注解

自動(dòng)配置類通常使用各種 @Conditional 注解來(lái)決定是否應(yīng)用特定的配置。這些條件基于類路徑中的類、存在的 Bean、配置屬性等。常見(jiàn)的條件注解包括:

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

示例:

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

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

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

4. 自動(dòng)配置的優(yōu)先級(jí)與覆蓋

雖然自動(dòng)配置會(huì)根據(jù)條件自動(dòng)配置很多 Bean,但開(kāi)發(fā)者可以通過(guò)以下方式覆蓋默認(rèn)配置:

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

5. SpringBoot Starter

Spring Boot Starter 是一組依賴描述符(通常是 Maven 或 Gradle 依賴),它們聚合了一組相關(guān)的依賴項(xiàng)。通過(guò)引入特定的 Starter,自動(dòng)配置機(jī)制會(huì)檢測(cè)到相關(guān)的依賴,并根據(jù)需要應(yīng)用相應(yīng)的自動(dòng)配置。

常見(jiàn)的 Starter 示例:

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

6. AutoConfigurationImportSelector 與組裝自動(dòng)配置

AutoConfigurationImportSelector 是 @EnableAutoConfiguration 背后的關(guān)鍵類。它負(fù)責(zé)讀取 spring.factories 文件中的自動(dòng)配置類,并應(yīng)用到 Spring 應(yīng)用上下文中。流程如下:

  • **解析 spring.factories**:讀取所有在 spring.factories 中注冊(cè)的自動(dòng)配置類。
  • 評(píng)估條件:對(duì)于每個(gè)自動(dòng)配置類,評(píng)估其 @Conditional 注解,決定是否應(yīng)用該配置。
  • 導(dǎo)入配置類:將符合條件的自動(dòng)配置類導(dǎo)入到應(yīng)用上下文中。

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

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

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

8. 自定義自動(dòng)配置

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

下面列舉了核心的 3個(gè)步驟:

  • 創(chuàng)建自動(dòng)配置類:使用 @Configuration 和適當(dāng)?shù)?nbsp;@Conditional 注解。
@Configuration
@ConditionalOnClass(MyService.class)
public class MyServiceAutoConfiguration {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}
  • 在 spring.factories 中注冊(cè):
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfig.MyServiceAutoConfiguration
  • 發(fā)布 Starter:將自動(dòng)配置類打包在一個(gè) Starter 中,供其他項(xiàng)目引入使用。

通過(guò)上面 3個(gè)核心步驟,當(dāng)我們?cè)趩?dòng)SpringBoot容器時(shí),自定義的類就會(huì)被自動(dòng)配置,實(shí)現(xiàn)我們要達(dá)到的預(yù)期。

9. 總結(jié)

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

責(zé)任編輯:趙寧寧 來(lái)源: 猿java
相關(guān)推薦

2012-10-29 11:01:17

2022-12-15 16:38:17

2024-03-06 13:56:00

項(xiàng)目awaitpromise

2010-08-25 11:14:05

云安全數(shù)據(jù)安全網(wǎng)絡(luò)安全

2025-02-07 15:01:49

Promise數(shù)組前端

2022-05-30 00:04:16

開(kāi)源Github技巧

2023-10-24 09:25:23

IT技巧文化

2024-03-21 09:58:27

ExtractTypeScript工具類型

2024-04-01 07:51:49

Exclude?工具類型TypeScript

2024-01-02 16:16:34

Promise前端

2023-01-03 11:47:47

2025-05-09 09:26:12

2011-09-25 10:46:18

云計(jì)算安全

2010-09-09 13:44:06

DIVCSS

2010-08-11 16:43:05

職場(chǎng)

2010-09-02 16:14:20

CSS布局

2024-03-27 14:06:58

Python代碼開(kāi)發(fā)

2023-11-27 16:01:59

JavaScrip技巧

2024-06-27 10:45:27

2021-11-19 10:40:14

物聯(lián)網(wǎng)物聯(lián)網(wǎng)安全IoT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)