中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解JAVA SPI機制以及使用方法

發布時間:2020-07-17 11:11:37 來源:億速云 閱讀:337 作者:小豬 欄目:編程語言

小編這次要給大家分享的是詳解JAVA SPI機制以及使用方法,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

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.Chinese
org.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機制以及使用方法的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大足县| 玉田县| 绥德县| 涪陵区| 凤翔县| 镇赉县| 连州市| 秭归县| 固始县| 遂昌县| 新和县| 绥江县| 那坡县| 望奎县| 措勤县| 巫溪县| 沽源县| 城口县| 砚山县| 晋城| 滨州市| 阿拉善盟| 彝良县| 花莲县| 南汇区| 辽宁省| 寿宁县| 宜黄县| 武宣县| 日照市| 洪湖市| 确山县| 锡林浩特市| 宁晋县| 图片| 贵德县| 江口县| 安龙县| 保康县| 定南县| 志丹县|