首頁>技術>

一、簡介

java中spi(service provider interface)是jdk內建的一種服務發現機制,可以基於配置,在執行時載入指定服務。java中提供了很多服務提供介面,如jdbc、jndi等。

二、開發步驟

spi開發中,涉及介面、實現類、配置檔案和服務載入,具體開發步驟如下:

定義介面和實現類(可多個);

在專案resources目錄下建立META-INF/services資料夾,接著在services資料夾下建立以介面完整類路徑名(包含包路徑和介面名)為檔名的檔案,檔案內容為需要載入的服務(實現類)的完整類路徑名,一行一個; 目錄結構類似:

resources--

|-services--

|-com.dragon.study.spring_boot_main.spi.Hello

檔案內容類似:

com.dragon.study.spring_boot_main.spi.HelloOne

com.dragon.study.spring_boot_main.spi.HelloTwo

在啟動類中載入服務,程式碼類似:

//載入方式一

Iterator<Hello> it = Service.providers(Hello.class);

while(it.hasNext()){

it.next().hello();

}

//載入方式二

ServiceLoader<Hello> hellos = ServiceLoader.load(Hello.class);

for (Hello h : hellos){

h.hello();

}

三、使用示例

3.1 定義介面和實現類

介面:

package com.dragon.study.spring_boot_main.spi;

public interface Hello {

void hello();

}

實現類一:

package com.dragon.study.spring_boot_main.spi;

public class HelloOne implements Hello {

@Override

public void hello() {

System.out.println("hello one");

}

}

實現類二:

package com.dragon.study.spring_boot_main.spi;

public class HelloTwo implements Hello {

@Override

public void hello() {

System.out.println("hello two");

}

}

3.2 定義配置檔案

在resources/META-INF/services目錄下建立配置檔案com.dragon.study.spring_boot_main.spi.Hello,內容如下:

com.dragon.study.spring_boot_main.spi.HelloOne

com.dragon.study.spring_boot_main.spi.HelloTwo

3.3 啟動類中載入服務

package com.dragon.study.spring_boot_main.spi;

import sun.misc.Service;

import java.util.Iterator;

import java.util.ServiceLoader;

public class SpiMain {

public static void main(String[] args) {

//載入方式一

// Iterator<Hello> it = Service.providers(Hello.class);

// while(it.hasNext()){

// it.next().hello();

// }

//載入方式二

ServiceLoader<Hello> hellos = ServiceLoader.load(Hello.class);

for (Hello h : hellos){

h.hello();

}

}

}

啟動後輸出:

hello one

hello two

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • java中Base64編碼與解碼