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

??Spring Boot SPI 用法教程?

 更新時間:2025年11月28日 09:00:57   作者:Rysxt  
文章介紹了Java SPI(服務(wù)提供者接口)和Spring Boot中的SPI機(jī)制,包括它們的定義、使用方式和實戰(zhàn)示例,文章還討論了常見問題和最佳實踐,如版本兼容性、條件裝配、避免類路徑?jīng)_突以及擴(kuò)展點選擇,感興趣的朋友一起看看吧

???一 概念與版本差異??

  • ??SPI(Service Provider Interface)??是一種在運行時發(fā)現(xiàn)并加載服務(wù)實現(xiàn)的機(jī)制,核心是“??接口與實現(xiàn)分離??”。在 ??JDK?? 中通過 ??META-INF/services/接口全限定名?? 文件與 ??ServiceLoader?? 實現(xiàn);在 ??Spring Boot?? 中擴(kuò)展了該思想,使用 ??META-INF/spring.factories?? 與 ??SpringFactoriesLoader?? 來批量加載自動配置、監(jiān)聽器等擴(kuò)展點。自 ??Spring Boot 2.7?? 起,官方為自動配置新增了 ??META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports?? 文件以替代 spring.factories 的自動配置注冊方式,二者可并存(老項目仍可用 spring.factories)。Spring 的 SPI 加載機(jī)制與 IoC 容器深度集成,支持按條件加載與更靈活的實例化策略。

??二 兩種 SPI 用法速覽??

  • 原生 Java SPI
    • 約定路徑:??META-INF/services/接口全限定名??;內(nèi)容為每行一個??實現(xiàn)類全限定名??。
    • 加載方式:??ServiceLoader.load(接口.class)??,迭代器按需實例化實現(xiàn)類(延遲加載、默認(rèn)無參構(gòu)造)。
    • 適用:與容器無關(guān)、輕量插件發(fā)現(xiàn)。
  • Spring Boot SPI
  • 約定路徑與方式:
    • 自動配置:Spring Boot 2.7+ 使用 ??META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports??(每行一個自動配置類);2.7 之前使用 ??META-INF/spring.factories?? 的 ??org.springframework.boot.autoconfigure.EnableAutoConfiguration?? 鍵。
    • 其他擴(kuò)展點:在 ??META-INF/spring.factories?? 中以鍵值對注冊(如 ??ApplicationListener??、自定義擴(kuò)展接口)。
  • 加載方式:??SpringFactoriesLoader.loadFactories/loadFactoryNames?? 讀取并實例化,可與 Spring 條件注解、環(huán)境集成。

??三 實戰(zhàn)一 自定義 Starter 并啟用自動配置(Spring Boot 2.7+)??

步驟

  • 新建模塊(如 ??my-spi-starter??),無需啟動類;添加依賴:
  • ??spring-boot-autoconfigure??
  • (可選)??spring-boot-configuration-processor??(生成配置元數(shù)據(jù))
  • 定義業(yè)務(wù)接口與實現(xiàn):
  • 接口:??com.example.spi.GreetingService??
  • 實現(xiàn):??com.example.spi.impl.EnglishGreetingService??、??ChineseGreetingService??
  • 編寫自動配置類:
  • 路徑:??com.example.spi.config.GreetingAutoConfiguration??
  • 要點:使用 ??@Configuration??、條件注解(如 ??@ConditionalOnClass??)、以及 ??@ConditionalOnMissingBean?? 保證用戶可覆蓋默認(rèn) Bean。
  • 注冊自動配置:在 ??resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports?? 寫入自動配置類全限定名(每行一個)。
  • 使用:在業(yè)務(wù)項目中引入 starter 依賴,按類型注入 ??GreetingService?? 即可使用(若用戶自行定義了同類型 Bean,則以用戶 Bean 為準(zhǔn))。

關(guān)鍵文件示例

AutoConfiguration.imports

com.example.spi.config.GreetingAutoConfiguration

GreetingAutoConfiguration.java

@Configuration
@ConditionalOnClass(GreetingService.class)
public class GreetingAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public GreetingService greetingService() {
        // 可按條件選擇默認(rèn)實現(xiàn),或返回抽象工廠
        return new EnglishGreetingService();
    }
}

說明

若需兼容 ??Spring Boot <2.7??,可在同模塊 ??resources/META-INF/spring.factories?? 增加:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.spi.config.GreetingAutoConfiguration

條件注解(如 ??@ConditionalOnClass/@ConditionalOnMissingBean??)是編寫自動配置的最佳實踐,可避免沖突并提升可覆蓋性。

??四 實戰(zhàn)二 使用 Java SPI 插件機(jī)制??

步驟

定義插件接口:??com.example.spi.Plugin??

多個實現(xiàn):??com.example.spi.impl.PluginA??、??PluginB??

注冊插件:在 ??resources/META-INF/services/com.example.spi.Plugin?? 寫入實現(xiàn)類全限定名(每行一個)。

加載插件(可在任意 Spring Bean 中):

import java.util.ServiceLoader;
ServiceLoader<Plugin> loader = ServiceLoader.load(Plugin.class);
for (Plugin p : loader) {
    p.execute();
}

適用場景

與 Spring 容器解耦的純發(fā)現(xiàn)機(jī)制;若需要依賴注入、AOP、條件控制,優(yōu)先考慮 Spring Boot 的 ??SpringFactoriesLoader?? 或在自動配置中封裝 [ServiceLoader]。

??五 常見問題與最佳實踐??

版本與路徑

??Spring Boot 2.7+?? 推薦將自動配置寫入 ??META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports??;老項目或第三方庫仍可能使用 ??META-INF/spring.factories??,注意維護(hù)兼容性。

條件裝配

在自動配置類上使用 ??@ConditionalOnClass/@ConditionalOnMissingBean?? 等,明確生效條件與可覆蓋性,避免與用戶配置沖突。

避免類路徑?jīng)_突

明確依賴版本與導(dǎo)出包,防止不同 JAR 提供同名實現(xiàn)導(dǎo)致不可預(yù)期行為。

擴(kuò)展點選擇

啟動生命周期、環(huán)境處理等框架擴(kuò)展點可用 ??spring.factories?? 注冊(如 ??SpringApplicationRunListener??、??EnvironmentPostProcessor??);業(yè)務(wù)插件發(fā)現(xiàn)可用 ??Java SPI?? 或 ??SpringFactoriesLoader??。

可維護(hù)性與文檔

為自定義 ??Starter?? 提供清晰的 ??README??、配置示例與可覆蓋策略說明,便于團(tuán)隊接入與二次開發(fā)。

到此這篇關(guān)于??Spring Boot SPI 用法教程?的文章就介紹到這了,更多相關(guān)??Spring Boot SPI內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)通訊錄管理系統(tǒng)

    java實現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 詳解Java編程JDialog窗體的用法及實例

    詳解Java編程JDialog窗體的用法及實例

    這篇文章主要介紹了Java編程中JDialog窗體的用法及實例,描述了其特征,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • springboot導(dǎo)入多個配置文件的方法實踐

    springboot導(dǎo)入多個配置文件的方法實踐

    Spring Boot 2.4.x引入了新的配置導(dǎo)入方式,通過spring.config.import屬性可以靈活地導(dǎo)入多種類型的配置文件,本文就來介紹一下,感興趣的可以了解一下
    2024-11-11
  • SpringBootWeb?入門了解?Swagger?的具體使用

    SpringBootWeb?入門了解?Swagger?的具體使用

    這篇文章主要介紹了SpringBootWeb?入門了解?Swagger?的具體使用,Swagger?框架可以根據(jù)已經(jīng)實現(xiàn)的方法或者類,通過頁面的方式直觀清晰的查看或者進(jìn)行測試該方法,需要的朋友可以參考下
    2024-08-08
  • Java中CopyOnWriteArrayList的使用解析

    Java中CopyOnWriteArrayList的使用解析

    這篇文章主要介紹了Java中CopyOnWriteArrayList的使用解析,CopyOnWriteArrayList適合使用在讀操作遠(yuǎn)遠(yuǎn)大于寫操作的場景里,比如緩存,它不存在擴(kuò)容的概念,每次寫操作都要復(fù)制一個副本,在副本的基礎(chǔ)上修改后改變Array引用,需要的朋友可以參考下
    2023-12-12
  • 淺析JVM如何處理Java中的精度轉(zhuǎn)換

    淺析JVM如何處理Java中的精度轉(zhuǎn)換

    在Java編程中,理解不同數(shù)據(jù)類型之間的轉(zhuǎn)換機(jī)制對于寫出高效、正確的代碼至關(guān)重要,本文將詳細(xì)探討Java中的精度轉(zhuǎn)換機(jī)制,有需要的小伙伴可以了解下
    2025-03-03
  • Java用文件流下載網(wǎng)絡(luò)文件示例代碼

    Java用文件流下載網(wǎng)絡(luò)文件示例代碼

    這篇文章主要介紹了Java用文件流的方式下載網(wǎng)絡(luò)文件,大家參考使用吧
    2013-11-11
  • java中的構(gòu)造函數(shù)什么時候被調(diào)用執(zhí)行

    java中的構(gòu)造函數(shù)什么時候被調(diào)用執(zhí)行

    這篇文章主要介紹了java中的構(gòu)造函數(shù)什么時候被調(diào)用執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java日常練習(xí)題,每天進(jìn)步一點點(22)

    Java日常練習(xí)題,每天進(jìn)步一點點(22)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口

    Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口

    這篇文章主要介紹了Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評論

古田县| 昔阳县| 盐山县| 社会| 赤城县| 镇雄县| 阜康市| 福泉市| 南昌市| 龙南县| 苗栗市| 遂昌县| 丹棱县| 锦州市| 邯郸县| 霍山县| 桂平市| 五家渠市| 牡丹江市| 五指山市| 拜城县| 正镶白旗| 金昌市| 故城县| 逊克县| 五指山市| 繁昌县| 安阳市| 庆元县| 基隆市| 忻州市| 盐津县| 江阴市| 施甸县| 遂溪县| 江永县| 盐城市| 宜城市| 乌拉特中旗| 会同县| 盐津县|