您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Java SPI機制的示例分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
mysql-connector
JDK中的nio SPI
再如,logback-classic
接下來,我們就來聊聊java SPI機制
一、SPI概念和規范
1.1 SPI概念
1.2 SPI規范
需要設置/META-INF/目錄
/META-INF/services
放到classpath下
/META-INF/services/目錄下放置配置文件
文件名是接口全路徑名
文件內部是要實現的接口實現類
文件編碼為UTF-8
使用ServiceLoad的load方法
二、SPI示例
編寫一個GreetingService接口
package com.wangmengjun.tutorial.spi;
public interface GreetingService {
void sayHello();
}
編寫2個實現類,分別輸出英文和中文
package com.wangmengjun.tutorial.spi.impl;
import com.wangmengjun.tutorial.spi.GreetingService;
public class EnglishGreetingServiceImpl implements GreetingService{
public void sayHello() {
System.out.println("Hello , This is SPI");
}
}
package com.wangmengjun.tutorial.spi.impl;
import com.wangmengjun.tutorial.spi.GreetingService;
public class ChineseGreetingServiceImpl implements GreetingService {
public void sayHello() {
System.out.println("你好,這是SPI");
}
}
創建META-INF文件目錄并設置實現類
使用ServiceLoader
package com.wangmengjun.tutorial.spi;
import java.util.Iterator;
import java.util.ServiceLoader;
public class SpiMain {
public static void main(String[] args) {
ServiceLoader<GreetingService> loader= ServiceLoader.load(GreetingService.class);
Iterator<GreetingService> greetingIter = loader.iterator();
while(greetingIter.hasNext()) {
GreetingService service= greetingIter.next();
System.out.println(service.getClass().getName());
service.sayHello();
}
}
}
輸出:
com.wangmengjun.tutorial.spi.impl.EnglishGreetingServiceImplHello , This is SPIcom.wangmengjun.tutorial.spi.impl.ChineseGreetingServiceImpl你好,這是SPI
經過上述幾個步驟,一個spi的簡單示例就完成了。
// The lazy-lookup iterator for iterator operations private Iterator<Provider<S>> lookupIterator1; private final List<S> instantiatedProviders = new ArrayList<>();
上述就是小編為大家分享的Java SPI機制的示例分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。