国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

詳解JAVA SPI機制和使用方法

瀏覽:4日期:2022-08-31 13:00:25

JAVA SPI 簡介

SPI 是 Java 提供的一種服務加載方式,全名為 Service Provider Interface。根據 Java 的 SPI 規范,我們可以定義一個服務接口,具體的實現由對應的實現者去提供,即服務提供者。然后在使用的時候再根據 SPI 的規范去獲取對應的服務提供者的服務實現。通過 SPI 服務加載機制進行服務的注冊和發現,可以有效的避免在代碼中將具體的服務提供者寫死。從而可以基于接口編程,實現模塊間的解耦。

SPI 機制的約定

1 在 META-INF/services/ 目錄中創建以接口全限定名命名的文件,該文件內容為API具體實現類的全限定名

2 使用 ServiceLoader 類動態加載 META-INF 中的實現類

3 如 SPI 的實現類為 Jar 則需要放在主程序 ClassPath 中

4 API 具體實現類必須有一個不帶參數的構造方法

SPI 應用場景舉例

JDBC

jdbc4.0以前, 開發人員還需要基于Class.forName('xxx')的方式來裝載驅動,jdbc4也基于spi的機制來發現驅動提供商了,可以通過METAINF/services/java.sql.Driver文件里指定實現類的方式來暴露驅動提供者.

COMMON-LOGGING

apache最早提供的日志的門面接口。只有接口,沒有實現。具體方案由各提供商實現, 發現日志提供商是通過掃描METAINF/services/org.apache.commons.logging.LogFactory配置文件,通過讀取該文件的內容找到日志提工商實現類。只要我們的日志實現里包含了這個文件,并在文件里制定 LogFactory工廠接口的實現類即可。

SPI 機制代碼示例

接口 People.java

package org.louis.spi.test;public interface People { public String speak();}

實現類 Chinese.java

package org.louis.spi.test; public class Chinese implements People{ public String speak() { return 'Chinese speak Chinese.'; } }

實現類 American.java

package org.louis.spi.test; public class American implements People{ public String speak() { return 'American speak English.'; } }

創建一個文件,放置到 META-INF/Services 目錄:

文件名:org.louis.spi.test.People

文件內容:

org.louis.spi.test.Chineseorg.louis.spi.test.American

新建一個測試工程,引入以上代碼生成的Jar包

測試類SpiTest.java

package org.louis.test; import java.util.Iterator;import java.util.ServiceLoader; import org.louis.spi.test.People;import org.louis.spi.test.Chinese;import org.louis.spi.test.American; public class SpiTest { public static void main(String[] args) { ServiceLoader<People> peoples = ServiceLoader.load(People.class); Iterator<IOperation> iterator = peoples.iterator(); while (iterator.hasNext()) { People people = iterator.next(); System.out.println(people.speak()); } } }

運行結果:

Chinese speak Chinese.

American speak English.

通過上面例子,我們看到,假如我要新加入一個韓國人的實現,那只需要新建一個新的工程,創建一個Koeran類實現People接口,并在自己工程 META-INF/Services 目錄下放置一個配置文件指定Koeran實現類,將工程打成Jar包,就完成了一個新的服務實現的開發。

以上就是示例講解JAVA SPI機制的詳細內容,更多關于JAVA SPI機制的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 男人天堂网在线视频 | 国产一区二区免费视频 | 亚洲国产激情一区二区三区 | 天天爽夜夜操 | 国产一区二区三区亚洲综合 | 在线观看免费精品国产 | 人人99| 美女福利视频国产片 | 欧美日韩一区二区三区四区在线观看 | 欧美日本俄罗斯一级毛片 | 手机在线看片国产日韩生活片 | 美女视频永久黄网站免费观看国产 | 性做久久久久久免费观看 | 亚洲国产人成中文幕一级二级 | 欧美性色高清生活片 | a级国产乱理伦片在线观看国 | 国产精品黄在线观看免费 | 三级视频在线观看 | 欧美日韩高清不卡免费观看 | 日韩视频一区二区三区 | 成人毛片网 | 久久aⅴ免费观看 | 美女张开腿黄网站免费国产 | 91精品国产91久久久久久青草 | 久久国产乱子伦精品免费不卡 | 久久精品久久久 | 亚洲欧美精品一区天堂久久 | 欧美中文字幕一区二区三区 | 成年免费a级毛片 | 亚州综合网| 精品国产午夜久久久久九九 | 91成人免费观看网站 | 久久成年人 | 国产成人综合久久精品亚洲 | 成年人网站免费在线观看 | 日韩国产欧美一区二区三区 | 精品国产一区二区三区www | 国产三级精品91三级在专区 | 亚洲精品国产精品国自产 | 国产日产欧美精品一区二区三区 | 香蕉久久高清国产精品免费 |