亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

作者 | 京東云開發(fā)者-京東零售 曹志飛

原文鏈接:https://my.oschina.NET/u/4090830/blog/10106105

SPI 是什么

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

整體機(jī)制如下圖

淺析 Java - SPI 機(jī)制

Java SPI 實際上是 “基于接口的編程+策略模式+配置文件” 組合實現(xiàn)的動態(tài)加載機(jī)制。

使用場景

適用于:調(diào)用者根據(jù)實際使用需要,啟用、擴(kuò)展、或者替換框架的實現(xiàn)策略

比較常見的例子:

  • 數(shù)據(jù)庫驅(qū)動加載接口實現(xiàn)類的加載,JDBC 加載不同類型數(shù)據(jù)庫的驅(qū)動
  • 日志門面接口實現(xiàn)類加載,SLF4J 加載不同提供商的日志實現(xiàn)類
  • Spring 中大量使用了 SPI, 比如:對 servlet3.0 規(guī)范對 ServletContAInerInitializer 的實現(xiàn)、自動類型轉(zhuǎn)換 Type Conversion SPI (Converter SPI、Formatter SPI) 等
  • Dubbo 中也大量使用 SPI 的方式實現(xiàn)框架的擴(kuò)展,不過它對 Java 提供的原生 SPI 做了封裝,允許用戶擴(kuò)展實現(xiàn) Filter 接口
使用介紹

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

  • 當(dāng)服務(wù)提供者提供了接口的一種具體實現(xiàn)后,在 jar 包的 META-INF/services 目錄下創(chuàng)建一個以 “接口全限定名” 為命名的文件,內(nèi)容為實現(xiàn)類的全限定名;
  • 接口實現(xiàn)類所在的 jar 包放在主程序的 classpath 中;
  • 主程序通過 java.util.ServiceLoder 動態(tài)裝載實現(xiàn)模塊,它通過掃描 META-INF/services 目錄下的配置文件找到實現(xiàn)類的全限定名,把類加載到 JVM;
  • SPI 的實現(xiàn)類必須攜帶一個不帶參數(shù)的構(gòu)造方法;
總結(jié)
  • 優(yōu)點(diǎn):使用 Java SPI 機(jī)制的優(yōu)勢是實現(xiàn)解耦,使得第三方服務(wù)模塊的裝配控制的邏輯與調(diào)用者的業(yè)務(wù)代碼分離,而不是耦合在一起。應(yīng)用程序可以根據(jù)實際業(yè)務(wù)情況啟用框架擴(kuò)展或替換框架組件。
  • 缺點(diǎn):
    1. 雖然 ServiceLoader 也算是使用的延遲加載,但是基本只能通過遍歷全部獲取,也就是接口的實現(xiàn)類全部加載并實例化一遍。如果你并不想用某些實現(xiàn)類,它也被加載并實例化了,這就造成了浪費(fèi)。獲取某個實現(xiàn)類的方式不夠靈活,只能通過 Iterator 形式獲取,不能根據(jù)某個參數(shù)來獲取對應(yīng)的實現(xiàn)類。
    2. 多個并發(fā)多線程使用 ServiceLoader 類的實例是不安全的。

END

分享到:
標(biāo)簽:Java
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定