<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SPI是什么?Java SPI的使用介紹

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-09-02 09:58 ? 次閱讀

SPI 是什么

SPI 全稱 Service Provider Interface,是 Java 提供的一套用來被第三方實現或者擴展的 API,它可以用來啟用框架擴展和替換組件。

整體機制如下圖

507ef174-48b5-11ee-97a6-92fbcf53809c.png

Java SPI 實際上是 “基于接口編程+策略模式+配置文件” 組合實現的動態加載機制。

使用場景

適用于:調用者根據實際使用需要,啟用、擴展、或者替換框架的實現策略

比較常見的例子:

數據庫驅動加載接口實現類的加載,JDBC 加載不同類型數據庫的驅動

日志門面接口實現類加載,SLF4J 加載不同提供商的日志實現類

Spring 中大量使用了 SPI, 比如:對 servlet3.0 規范對 ServletContainerInitializer 的實現、自動類型轉換 Type Conversion SPI (Converter SPI、Formatter SPI) 等

Dubbo 中也大量使用 SPI 的方式實現框架的擴展,不過它對 Java 提供的原生 SPI 做了封裝,允許用戶擴展實現 Filter 接口

使用介紹

要使用 Java SPI,需要遵循如下約定:

當服務提供者提供了接口的一種具體實現后,在 jar 包的 META-INF/services 目錄下創建一個以 “接口全限定名” 為命名的文件,內容為實現類的全限定名;

接口實現類所在的 jar 包放在主程序的 classpath 中;

主程序通過 java.util.ServiceLoder 動態裝載實現模塊,它通過掃描 META-INF/services 目錄下的配置文件找到實現類的全限定名,把類加載到 JVM;

SPI 的實現類必須攜帶一個不帶參數的構造方法;

總結

優點:使用 Java SPI 機制的優勢是實現解耦,使得第三方服務模塊的裝配控制的邏輯與調用者的業務代碼分離,而不是耦合在一起。應用程序可以根據實際業務情況啟用框架擴展或替換框架組件。

缺點:

雖然 ServiceLoader 也算是使用的延遲加載,但是基本只能通過遍歷全部獲取,也就是接口的實現類全部加載并實例化一遍。如果你并不想用某些實現類,它也被加載并實例化了,這就造成了浪費。獲取某個實現類的方式不夠靈活,只能通過 Iterator 形式獲取,不能根據某個參數來獲取對應的實現類。

多個并發多線程使用 ServiceLoader 類的實例是不安全的。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動器
    +關注

    關注

    51

    文章

    7570

    瀏覽量

    143638
  • SPI接口
    +關注

    關注

    0

    文章

    256

    瀏覽量

    34043
  • JAVA語言
    +關注

    關注

    0

    文章

    138

    瀏覽量

    19966
  • JVM
    JVM
    +關注

    關注

    0

    文章

    152

    瀏覽量

    12139
  • 解耦控制
    +關注

    關注

    0

    文章

    29

    瀏覽量

    10175

原文標題:淺析 Java - SPI 機制

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    JAVA操作英創主板SPI接口簡介

    訪問硬件資源,英創提供了Java硬件支持包,主要支持的工控接口有:以太網、串口、CAN、GPIO、SPI、I2C、RTC等。本文主要介紹使用Java語言調用英創
    發表于 10-20 13:16

    SPI接口總線介紹

    SPI接口總線介紹 SPI 可以作為主、從器件工作,并可在同一總線上支持多個主、從器件。SPI 主要使用3 個信號。(1)主輸出、從
    發表于 11-24 08:41 ?4690次閱讀
    <b class='flag-5'>SPI</b>接口總線<b class='flag-5'>介紹</b>

    SPI總線簡介與參考實例

    spi協議介紹,通過文檔形式說明spi總線時序
    發表于 11-19 15:12 ?55次下載

    SPI總線協議介紹

    這是SPI協議的介紹,很有用的哦,歡迎大家下載。
    發表于 04-13 14:21 ?17次下載

    SPI接口的應用與基于FPGA的SPI自動發送模塊設計

    SPI 接口應用十分廣泛,在很多情況下,人們會用軟件模擬的方法來產生SPI 時序或是采用帶SPI 功能模塊的MCU。但隨著可編程邏輯技術的發展,人們往往需要自己設計簡單的SPI 發送模
    發表于 10-19 10:33 ?19次下載
    <b class='flag-5'>SPI</b>接口的應用與基于FPGA的<b class='flag-5'>SPI</b>自動發送模塊設計

    spi從機程序設計_spi從機程序代碼詳細介紹

    本文介紹STM32F407的SPI主從機通信程序和基于計數器的spi從機程序這兩種spi從機程序
    發表于 12-29 15:05 ?3.3w次閱讀
     <b class='flag-5'>spi</b>從機程序設計_<b class='flag-5'>spi</b>從機程序代碼詳細<b class='flag-5'>介紹</b>

    英創信息技術JAVA操作英創主板SPI接口簡介

    資源,英創提供了Java硬件支持包,主要支持的工控接口有:以太網、串口、CAN、GPIO、SPI、I2C、RTC等。本文主要介紹使用Java語言調用英創
    的頭像 發表于 02-06 11:09 ?1586次閱讀
    英創信息技術<b class='flag-5'>JAVA</b>操作英創主板<b class='flag-5'>SPI</b>接口簡介

    SPI基礎,SPI是怎么樣的?

    SPI是一種簡單的接口,允許一個芯片與一個或多個其他芯片進行通信。 1,SPI是怎么樣的? 讓我們從一個簡單的示例開始,其中只有兩個芯片必須一起通信。 SPI要求在兩個芯片之間使用4條線。 如您所見
    的頭像 發表于 11-19 18:06 ?4557次閱讀

    怎么樣利用AXI Quad SPI快速打通Linux至PL端SPI從設備?

    [導讀] 前面寫過篇介紹ZYNQ基本情況的文章,今天來肝一篇實戰文章介紹AXI quad SPI 使用方法,如果你正使用ZYNQ的這個IP,希望對你有所幫助。 初識AXI quad SPI
    的頭像 發表于 04-09 17:45 ?7030次閱讀
    怎么樣利用AXI Quad <b class='flag-5'>SPI</b>快速打通Linux至PL端<b class='flag-5'>SPI</b>從設備?

    spi協議介紹

    文章目錄前言一、SPI介紹1.SPI總線2.尋址方式二、通信原理1.通信過程2.極性和相位3.四種工作模式三、SPI與I2C的異同1.相同點2.不同點總結前言
    發表于 12-22 19:21 ?19次下載
    <b class='flag-5'>spi</b>協議<b class='flag-5'>介紹</b>

    源碼級深度理解Java SPI

    SPI 配置:Java SPI 機制約定的配置文件,提供查找服務實現類的邏輯。配置文件必須置于 META-INF/services 目錄中,并且,文件名應與服務提供者接口的完全限定名保持一致。文件中的每一行都有一個實現服務類的詳
    的頭像 發表于 11-15 11:38 ?492次閱讀

    Java、Spring、Dubbo三者SPI機制的原理和區別

    其實我之前寫過一篇類似的文章,但是這篇文章主要是剖析dubbo的SPI機制的源碼,中間只是簡單地介紹了一下Java、Spring的SPI機制,并沒有進行深入,所以本篇就來深入聊一聊這三
    的頭像 發表于 06-05 15:21 ?479次閱讀
    <b class='flag-5'>Java</b>、Spring、Dubbo三者<b class='flag-5'>SPI</b>機制的原理和區別

    SPI通用接口層介紹

    SPI 通用接口層 SPI 通用接口層把具體的 SPI 設備的協議驅動和 SPI 控制器驅動連接在一起。 負責 SPI 系統與 Linux
    的頭像 發表于 07-25 10:52 ?510次閱讀

    什么是SPI機制

    1、前言 在之前的 JVM 分析系列之類加載 提到過 Java SPI 機制,主要是類加載器反雙親委派的實現(第三方包不在指定jdk路徑,一般類加載器無法加載,需要特殊
    的頭像 發表于 10-08 15:03 ?666次閱讀
    什么是<b class='flag-5'>SPI</b>機制

    SPI接口介紹

    電子發燒友網站提供《SPI接口介紹.pdf》資料免費下載
    發表于 10-13 10:49 ?0次下載
    <b class='flag-5'>SPI</b>接口<b class='flag-5'>介紹</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>