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

SpringBoot3 spring.factories自動(dòng)配置功能不生效的解決

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

場(chǎng)景說(shuō)明

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

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

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

其中 SseAutoConfigure 就是你要自動(dòng)化配置的類(lèi):

/**
 * SSE服務(wù)端 核心配置類(lèi)
 *
 * @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();
    }
}

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

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

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

但是!從SpringBoot3開(kāi)始,這樣 spring.factories 自動(dòng)配置功能不生效了。

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

原因說(shuō)明

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

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

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

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

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

從表面上看,確實(shí)是這樣,但是這為未來(lái)提供了很大的意義:

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

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

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

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

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

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

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

未來(lái)趨勢(shì)和新機(jī)制

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

如何遷移老的starter

原自定義的starter工程:

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

在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中添加你的自動(dòng)配置類(lèi)路徑,例如:

com.bigshow.starter.sse.config.SseAutoConfigure

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

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

這里簡(jiǎn)單說(shuō)明下@Configuration 換成 @AutoConfiguration 好處

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

總結(jié)

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

相關(guān)文章

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

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

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

    Spring中Service注入多個(gè)實(shí)現(xiàn)類(lèi)的方法詳解

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

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

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

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

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

    Java借助Spire.Doc for Java庫(kù)合并Word文檔

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

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

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

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

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

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

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

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

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

    SpringSecurity的@EnableWebSecurity注解詳解

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

最新評(píng)論

定南县| 迁西县| 沁源县| 海南省| 刚察县| 绍兴县| 平阳县| 水富县| 资兴市| 南投县| 荔浦县| 东乡族自治县| 蕲春县| 黄大仙区| 措美县| 象州县| 彰化市| 福贡县| 商南县| 石屏县| 玉林市| 武冈市| 武强县| 阜阳市| 疏附县| 泰来县| 佛山市| 勃利县| 沙坪坝区| 那坡县| 丽水市| 广西| 通渭县| 太谷县| 客服| 德兴市| 北流市| 商丘市| 克东县| 华池县| 阳新县|