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

一文徹底弄懂spring?boot自動配置的過程(推薦)

 更新時間:2024年10月28日 09:06:59   作者:lgx211  
SpringBoot的自動配置機(jī)制通過@SpringBootApplication注解作為起點,結(jié)合@EnableAutoConfiguration和spring.factories文件,實現(xiàn)了基于類路徑依賴、環(huán)境配置和自定義代碼的智能化配置,感興趣的朋友跟隨小編一起看看吧

Spring Boot 的自動配置機(jī)制是它的重要特性之一,極大地簡化了 Spring 應(yīng)用的配置工作。自動配置的核心思想是基于類路徑中的依賴、環(huán)境配置以及自定義代碼進(jìn)行智能化配置,避免了開發(fā)者手動編寫大量的樣板代碼。

接下來,我將詳細(xì)介紹 Spring Boot 自動配置的過程,核心原理以及涉及的關(guān)鍵組件,并結(jié)合源碼進(jìn)行深入解析。

一、Spring Boot 自動配置的工作流程

  • @SpringBootApplication 注解自動配置的起點通常是 @SpringBootApplication 注解,它是一個組合注解,包含了三個重要注解:

    其中 @EnableAutoConfiguration 是自動配置的核心,它引導(dǎo)自動配置機(jī)制。

    • @SpringBootConfiguration:標(biāo)記為一個 Spring 配置類,類似于 @Configuration
    • @EnableAutoConfiguration:啟用 Spring Boot 的自動配置機(jī)制。
    • @ComponentScan:掃描當(dāng)前包及其子包下的所有 Spring 組件。

@EnableAutoConfiguration 和 AutoConfigurationImportSelector@EnableAutoConfiguration 注解的作用是告訴 Spring Boot 啟動時自動配置 Spring 應(yīng)用上下文。該注解引入了 AutoConfigurationImportSelector,這是自動配置的核心處理器。

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

AutoConfigurationImportSelector 類會從配置文件中(通常是 spring.factories)讀取所有的自動配置類,并將它們導(dǎo)入到應(yīng)用上下文中。

spring.factories 文件自動配置類是通過 spring-boot-autoconfigure 模塊的 META-INF/spring.factories 文件來配置的。這個文件中列出了所有可以被自動加載的配置類:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
...

這些配置類會在 Spring Boot 啟動時根據(jù)當(dāng)前環(huán)境條件被選擇性加載。

  • 條件裝配(@Conditional 系列注解)Spring Boot 并不是盲目地加載所有的自動配置類。每個自動配置類通常都會使用 @Conditional 系列注解來進(jìn)行有條件的加載。最常見的條件注解有:

    例如,DataSourceAutoConfiguration 只有在項目中存在數(shù)據(jù)源相關(guān)的依賴(如 javax.sql.DataSource 類)時才會被加載。

    • @ConditionalOnClass:當(dāng)類路徑中存在某個類時才生效。
    • @ConditionalOnMissingBean:當(dāng) Spring 上下文中不存在某個 Bean 時才生效。
    • @ConditionalOnProperty:當(dāng)某個配置屬性滿足特定條件時才生效。
    • @ConditionalOnBean:當(dāng) Spring 上下文中存在某個 Bean 時才生效。

自動配置類示例:DataSourceAutoConfiguration

Spring Boot 中 DataSourceAutoConfiguration 是配置數(shù)據(jù)源的自動配置類,它的源碼如下:

@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({DataSourcePoolMetadataProvidersConfiguration.class,
         DataSourceInitializationConfiguration.class})
public class DataSourceAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public DataSource dataSource(DataSourceProperties properties) {
        // 創(chuàng)建并返回 DataSource 對象
        return properties.initializeDataSourceBuilder().build();
    }
}

這種基于條件的配置方式確保了 Spring Boot 的靈活性,允許用戶通過覆蓋默認(rèn) Bean 或不滿足條件的方式跳過某些自動配置。

  • @ConditionalOnClass(DataSource.class):只有當(dāng)類路徑下存在 DataSource 類時,才進(jìn)行數(shù)據(jù)源的自動配置。
  • @ConditionalOnMissingBean:如果 Spring 上下文中沒有其他 DataSource Bean,則自動配置一個。

二、Spring Boot 自動配置的核心步驟

  • 收集自動配置類啟動時,AutoConfigurationImportSelector 從 spring.factories 文件中讀取所有的自動配置類,并通過 @Import 導(dǎo)入這些類。
  • 條件檢查自動配置類的加載不是無條件的,Spring Boot 會根據(jù) @Conditional 注解進(jìn)行條件檢查,確保只有符合條件的自動配置類才會生效。
  • 注入所需的 Bean一旦自動配置類通過條件檢查,Spring Boot 就會根據(jù)這些配置類注冊所需的 Bean。例如,DataSourceAutoConfiguration會自動配置數(shù)據(jù)源相關(guān)的 Bean。
  • 允許用戶覆蓋自動配置自動配置并不是強(qiáng)制的。用戶可以通過顯式聲明自己的 Bean 來覆蓋自動配置的默認(rèn)行為。例如,如果用戶在自己的配置類中定義了 DataSource,那么 Spring Boot 就不會再自動配置數(shù)據(jù)源。

三、Spring Boot 自動配置的實際案例

  • Web 應(yīng)用自動配置在 Spring Boot Web 應(yīng)用中,DispatcherServletAutoConfiguration 負(fù)責(zé)自動配置 Spring MVC 的核心組件,例如 DispatcherServlet、RequestMappingHandlerMapping 等。

    • 如果項目中存在 spring-web 依賴,那么 DispatcherServletAutoConfiguration 會自動加載。
    • 如果沒有手動定義 DispatcherServlet,Spring Boot 會自動創(chuàng)建一個 DispatcherServlet 并配置到 Spring 容器中。

數(shù)據(jù)庫連接池自動配置Spring Boot 還會自動配置數(shù)據(jù)庫連接池(如 HikariCP、Tomcat JDBC 等),這依賴于項目中的 spring-boot-starter-data-jpa 或者 spring-boot-starter-jdbc 依賴。

同時,用戶可以通過 application.properties 文件來自定義連接池配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.hikari.maximum-pool-size=10
  • DataSourceAutoConfiguration 和 DataSourceProperties 共同負(fù)責(zé)自動配置數(shù)據(jù)源。
  • 如果類路徑中存在連接池類(如 HikariDataSource),那么 Spring Boot 就會自動配置連接池。
  • Spring Security 自動配置當(dāng)引入 spring-boot-starter-security 依賴時,Spring Boot 會自動配置安全機(jī)制,默認(rèn)提供 HTTP Basic 認(rèn)證機(jī)制。

    • SecurityAutoConfiguration 負(fù)責(zé)自動配置 Spring Security 的基礎(chǔ)設(shè)施。
    • 如果需要定制安全策略,可以通過自定義 WebSecurityConfigurerAdapter 來覆蓋默認(rèn)配置。

四、Spring Boot 自動配置的好處

  • 極大地簡化配置工作:開發(fā)者不再需要為每個基礎(chǔ)設(shè)施組件編寫配置代碼,自動配置機(jī)制根據(jù)項目依賴自動注入所需的 Bean。
  • 靈活性:自動配置并不會束縛開發(fā)者。開發(fā)者可以通過自定義配置輕松覆蓋默認(rèn)的自動配置。
  • 約定優(yōu)于配置:Spring Boot 遵循 "約定優(yōu)于配置" 的原則,只需少量的配置,Spring Boot 就能完成復(fù)雜的初始化工作。

五、Spring Boot 自動配置與 Spring 自動裝配的區(qū)別

  • Spring 自動裝配:指通過 @Autowired 等注解,根據(jù)類型自動注入依賴 Bean。它側(cè)重于注入已經(jīng)配置好的 Bean。
  • Spring Boot 自動配置:是根據(jù)類路徑中的依賴和環(huán)境信息自動配置 Spring 組件的過程。它負(fù)責(zé)創(chuàng)建并配置所需的基礎(chǔ)設(shè)施 Bean。

總結(jié)來說,Spring Boot 的自動配置機(jī)制通過 @EnableAutoConfiguration 啟動,基于 spring.factories 中的配置和 @Conditional 條件判斷,自動注入所需的 Bean,簡化了開發(fā)者的配置工作,同時保留了靈活的定制能力。

到此這篇關(guān)于一文徹底弄懂spring boot自動配置的過程的文章就介紹到這了,更多相關(guān)spring boot自動配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java枚舉類型enum的詳解及使用

    Java枚舉類型enum的詳解及使用

    這篇文章主要介紹了Java枚舉類型enum的詳解及使用的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Spring Cloud中Eureka開啟密碼認(rèn)證的實例

    Spring Cloud中Eureka開啟密碼認(rèn)證的實例

    這篇文章主要介紹了Spring Cloud中Eureka開啟密碼認(rèn)證的實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Spring boot項目部署到云服務(wù)器小白教程詳解

    Spring boot項目部署到云服務(wù)器小白教程詳解

    這篇文章主要介紹了Spring boot項目部署到云服務(wù)器小白教程詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • springboot整合mybatis將sql打印到日志的實例詳解

    springboot整合mybatis將sql打印到日志的實例詳解

    這篇文章主要介紹了springboot整合mybatis將sql打印到日志的實例詳解,需要的朋友可以參考下
    2017-12-12
  • 深入理解JDK8中Stream使用

    深入理解JDK8中Stream使用

    Stream 是 Java8 中處理集合的關(guān)鍵抽象概念,它可以指定你希望對集合進(jìn)行的操作,可以執(zhí)行非常復(fù)雜的查找、過濾和映射數(shù)據(jù)等操作。這篇文章主要介紹了JDK8中Stream使用解析,需要的朋友可以參考下
    2021-06-06
  • java使用poi導(dǎo)出Excel的方法

    java使用poi導(dǎo)出Excel的方法

    這篇文章主要為大家詳細(xì)介紹了java使用poi導(dǎo)出Excel的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java設(shè)計模式之23種設(shè)計模式詳解

    Java設(shè)計模式之23種設(shè)計模式詳解

    這篇文章主要介紹了Java設(shè)計模式之23種設(shè)計模式詳解,設(shè)計模式使代碼編制真正工程化,設(shè)計模式是軟件工程的基石,項目中合理的運(yùn)用設(shè)計模式可以完美的解決很多問題,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java:提示程序包org.junit不存在時的解決方案

    java:提示程序包org.junit不存在時的解決方案

    這篇文章主要介紹了java:提示程序包org.junit不存在時的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • mybatis-plus報錯net.sf.jsqlparser.statement.select.SelectBody的問題解決

    mybatis-plus報錯net.sf.jsqlparser.statement.select.SelectBody的

    本文主要介紹了mybatis-plus報錯net.sf.jsqlparser.statement.select.SelectBody的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • java的Stream流處理示例小結(jié)

    java的Stream流處理示例小結(jié)

    Stream API提供了一種高效、聲明式的數(shù)據(jù)處理方式,是現(xiàn)代 Java 編程中不可或缺的工具,合理使用可以大幅提升代碼的可讀性和維護(hù)性,這篇文章主要介紹了java的Stream流處理,需要的朋友可以參考下
    2025-06-06

最新評論

宜章县| 玉田县| 武陟县| 新巴尔虎左旗| 湖北省| 鹿泉市| 延寿县| 神农架林区| 手游| 盐城市| 南开区| 哈巴河县| 西丰县| 贞丰县| 澄迈县| 铁岭县| 花莲县| 仁寿县| 沭阳县| 墨脱县| 丹东市| 濉溪县| 汽车| 乌兰浩特市| 瑞安市| 贵阳市| 鲁甸县| 长宁县| 新晃| 河池市| 河源市| 甘孜县| 临潭县| 离岛区| 天津市| 紫云| 油尖旺区| 吉木萨尔县| 北海市| 武宁县| 兴山县|