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

SpringBoot3 spring.factories自動配置功能不生效的解決

 更新時間:2025年09月04日 16:14:35   作者:小時候的陽光  
SpringBoot3棄用spring.factories,改用AutoConfiguration.imports文件管理自動配置類,需刪除舊文件,新增專用文件并使用@AutoConfiguration替代@Configuration+@ConditionalOn組合注解,提升配置清晰度與未來擴(kuò)展性

場景說明

原來的SpringBoot 自動配置功能如下,主要是創(chuàng)建spring.factories 文件,在里面寫入你要自動配置的類全路徑。

文件內(nèi)容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.bigshow.starter.sse.config.SseAutoConfigure

其中 SseAutoConfigure 就是你要自動化配置的類:

/**
 * SSE服務(wù)端 核心配置類
 *
 * @author BigShow
 */
@Configuration
@ConditionalOnProperty(prefix = "bigshow.sse", value = "enable", havingValue = "true")
@EnableConfigurationProperties({SseProperties.class})
public class SseAutoConfigure implements InitializingBean {

    @Lazy
    @Resource
    private ApplicationContext applicationContext;

    @Bean
    @ConditionalOnMissingBean
    SseServer sseServer() {
        return new SseServer();
    }


    @Bean
    @ConditionalOnMissingBean
    public SseBusinessService sseBusinessService() {
        return new DefaultSseBusinessServiceImpl();
    }
}

該項目打包 mvn clean install 或者 mvn deploy 發(fā)布到maven倉庫中去,

其他應(yīng)用項目直接引入然后在application.yml文件中配置一下即可使用此功能。

    <dependency>
        <groupId>com.bigshow</groupId>
        <artifactId>sse-spring-boot-starter</artifactId>
        <version>1.0</version>
    </dependency>
bigshow:
  sse:
    enable: true

但是!從SpringBoot3開始,這樣 spring.factories 自動配置功能不生效了。

原因是:官方做出了改變!

原因說明

Spring Boot 3采用了基于META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件的自動配置加載策略,替代了過去的spring.factories方式

注意:文件名字就是 “org.springframework.boot.autoconfigure.AutoConfiguration.imports

這個文件里面的內(nèi)容就是你要配置類的全路徑名稱即可:

com.example.autoconfig.MyAutoConfiguration1
com.example.autoconfig.MyAutoConfiguration2
com.example.autoconfig.MyAutoConfiguration3
...

看到這里不禁要問:這和之前的有什么區(qū)別 ,感覺就是配置文件名稱不一樣了 ? !

從表面上看,確實是這樣,但是這為未來提供了很大的意義:

原來的 spring.factories 文件里面可以做很多其他的事情,它是一個 多功能的配置文件,采用鍵值對形式,內(nèi)部可以聲明多種類型的自動加載內(nèi)容,不只是自動配置類,還包括:

  • 監(jiān)聽器(ApplicationListener)
  • 環(huán)境后置處理器(EnvironmentPostProcessor)
  • ApplicationContextInitializer
  • FactoryBean 等等

所以確實,spring.factories文件長期承擔(dān)了很多職責(zé),Spring Boot3通過拆分專用文件來讓自動配置更清晰規(guī)范,也更適合未來演進(jìn),

Spring Boot 3 對 spring.factories 中的自動配置部分做了拆分,但 其他功能和擴(kuò)展點并沒有全部拋棄 spring.factories,而是逐步遷移或沿用不同的新機(jī)制。

功能類型以前在 spring.factories 里聲明Spring Boot 3 處理方式(現(xiàn)狀)
自動配置類(EnableAutoConfiguration)在 spring.factories 的 key: org.springframework.boot.autoconfigure.EnableAutoConfiguration拆分到 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中聲明類全名
ApplicationListenerspring.factories的org.springframework.context.ApplicationListener依然使用 spring.factories 方式聲明,暫時未拆分,未來可能轉(zhuǎn)為模塊化機(jī)制
EnvironmentPostProcessorspring.factories的org.springframework.boot.env.EnvironmentPostProcessor依然通過 spring.factories 聲明繼續(xù)使用
ApplicationContextInitializerspring.factories的org.springframework.context.ApplicationContextInitializer目前依然使用 spring.factories
FactoryBean及其他擴(kuò)展類spring.factories聲明大多數(shù)依然沿用 spring.factories,具體視擴(kuò)展功能而定

簡單總結(jié)過去和現(xiàn)在的配置文件方式對比:

方面以前的 spring.factories現(xiàn)在的 AutoConfiguration.imports
作用范圍多種擴(kuò)展點都在里面聲明只聲明自動配置類
文件結(jié)構(gòu)key-value 配置格式純粹類名列表,每行一個全限定類名
維護(hù)復(fù)雜度可能集中且復(fù)雜簡單、專一,后續(xù)更易擴(kuò)展
兼容性老版本Spring Boot依賴Spring Boot 3及以后版本推薦

未來趨勢和新機(jī)制

  • Spring 團(tuán)隊計劃逐步拆解 spring.factories 的過度職責(zé),將不同的擴(kuò)展分別拆分到更明確、可維護(hù)的專用文件或基于 Java 模塊系統(tǒng)(JPMS)的機(jī)制中。
  • 部分機(jī)制將使用 spring.autoconfigure 專用資源文件,其他高級擴(kuò)展會結(jié)合 SPI(ServiceLoader機(jī)制)、spring/org/springframework/boot 下的專用目錄,或者全新注解驅(qū)動方式實現(xiàn)。
  • 但目前絕大多數(shù)非自動配置的擴(kuò)展仍舊通過 spring.factories 管理。

如何遷移老的starter

原自定義的starter工程:

刪除META-INF/spring.factories文件或者停止使用它。

在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中添加你的自動配置類路徑,例如:

com.bigshow.starter.sse.config.SseAutoConfigure

自動配置類里使用@AutoConfiguration替換原來@Configuration和 (Spring Boot 3 官方推薦使用@AutoConfiguration替代以前的@Configuration + @ConditionalOn等組合注解)

@AutoConfiguration
@ConditionalOnProperty(prefix = "bigshow.sse", value = "enable", havingValue = "true")
@EnableConfigurationProperties({SseProperties.class})
public class SseAutoConfigure implements InitializingBean {
...
}

這里簡單說明下@Configuration 換成 @AutoConfiguration 好處

  1. 明確標(biāo)識自動配置類身份
  2. 增強(qiáng)編譯期和IDE的支持
  3. 更精準(zhǔn)的自動配置加載機(jī)制
  4. 未來擴(kuò)展和模塊化支持更友好
  5. 避免潛在的類路徑掃描沖突
  6. 結(jié)合條件注解效果更可靠

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 設(shè)置JavaScript自動提示-Eclipse/MyEclipse

    設(shè)置JavaScript自動提示-Eclipse/MyEclipse

    自動提示需要2個組件,分別是:ext-4.0.2a.jsb2||spket-1.6.16.jar,需要的朋友可以參考下
    2016-05-05
  • Spring中Service注入多個實現(xiàn)類的方法詳解

    Spring中Service注入多個實現(xiàn)類的方法詳解

    這篇文章主要介紹了Spring中Service注入多個實現(xiàn)類的方法詳解,Spring是一個開源的Java框架,用于構(gòu)建企業(yè)級應(yīng)用程序,它提供了許多功能,如依賴注入、面向切面編程、數(shù)據(jù)訪問、Web開發(fā)等,需要的朋友可以參考下
    2023-07-07
  • 詳解Spring Security的formLogin登錄認(rèn)證模式

    詳解Spring Security的formLogin登錄認(rèn)證模式

    對于一個完整的應(yīng)用系統(tǒng),與登錄驗證相關(guān)的頁面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁面,也就是本文給大家介紹的formLogin模式登錄認(rèn)證模式,感興趣的朋友跟隨小編一起看看吧
    2019-11-11
  • java數(shù)據(jù)隨機(jī)分頁實現(xiàn)方案

    java數(shù)據(jù)隨機(jī)分頁實現(xiàn)方案

    本文主要介紹了java數(shù)據(jù)隨機(jī)分頁實現(xiàn)方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java借助Spire.Doc for Java庫合并Word文檔

    Java借助Spire.Doc for Java庫合并Word文檔

    在 Java 開發(fā)項目中,經(jīng)常需要將多個 Word 文檔合并成一個完整文件,通過 Spire.Doc for Java 庫,我們可以輕松實現(xiàn)這一操作,下面小編就和大家詳細(xì)介紹一下吧
    2026-03-03
  • SpringBoot打包成Docker鏡像的幾種實現(xiàn)方式

    SpringBoot打包成Docker鏡像的幾種實現(xiàn)方式

    Spring Boot是一個用于構(gòu)建獨立的、可執(zhí)行的Spring應(yīng)用程序的框架,結(jié)合使用Spring Boot和Docker,可以方便地將應(yīng)用程序部署到不同的環(huán)境中本文,主要介紹了SpringBoot打包成Docker鏡像的幾種實現(xiàn)方式,感興趣的可以了解一下
    2024-01-01
  • 深入理解Thread.sleep(0)的作用

    深入理解Thread.sleep(0)的作用

    本文主要介紹了深入理解Thread.sleep(0)的作用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • RocketMq深入分析講解兩種削峰方式

    RocketMq深入分析講解兩種削峰方式

    當(dāng)上游調(diào)用下游服務(wù)速率高于下游服務(wù)接口QPS時,那么如果不對調(diào)用速率進(jìn)行控制,那么會發(fā)生很多失敗請求,通過消息隊列的削峰方法有兩種,這篇文章主要介紹了RocketMq深入分析講解兩種削峰方式
    2023-01-01
  • 關(guān)于java獲取新浪天氣示例

    關(guān)于java獲取新浪天氣示例

    這篇文章主要介紹了關(guān)于java獲取新浪天氣示例,新浪的接口可以直接通過城市名字查詢天氣所以這里使用新浪API,,需要的朋友可以參考下
    2023-04-04
  • SpringSecurity的@EnableWebSecurity注解詳解

    SpringSecurity的@EnableWebSecurity注解詳解

    這篇文章主要介紹了SpringSecurity的@EnableWebSecurity注解詳解,@EnableWebSecurity是開啟SpringSecurity的默認(rèn)行為,它的上面有一個Import注解導(dǎo)入了WebSecurityConfiguration類,就是往IOC容器中注入了WebSecurityConfiguration這個類,需要的朋友可以參考下
    2023-11-11

最新評論

嘉荫县| 连南| 宣恩县| 土默特右旗| 苗栗市| 南靖县| 湛江市| 高陵县| 慈溪市| 驻马店市| 黄龙县| 密山市| 武乡县| 聊城市| 花垣县| 德化县| 陵川县| 达孜县| 合阳县| 乐都县| 綦江县| 韶关市| 河曲县| 甘孜县| 墨竹工卡县| 安平县| 泸西县| 浦北县| 称多县| 阿坝县| 博客| 确山县| 西丰县| 天峨县| 佳木斯市| 额济纳旗| 资兴市| 乌拉特中旗| 灯塔市| 龙州县| 宜君县|