不做知識的搬運工,堅持原創,閱讀更多文章,歡迎訂閱微信公眾號:深夜程猿
概述
對於Java SPI會分為兩篇文章來介紹,第一篇文章會簡單介紹如何實現一個Java SPI Demo學習,第二篇文章會從JDK原始碼角度來分析Java SPI實現原理
什麼是Java SPI
SPI的全稱是Service Provider Interface,是JDK內建的一種服務發現機制。通過SPI我們可以動態載入我們定義的服務實現類。
Demo展示
定義一個介面
package com.spi;
public interface ISpi {
void say();
}
複製程式碼
編寫兩個實現類
package com.spi;
public class FirstSpiImpl implements ISpi {
@Override
public void say() {
System.out.println("我是第一個SPI實現類");
}
}
複製程式碼
package com.spi;
public class SecondSpiImpl implements ISpi {
@Override
public void say() {
System.out.println("我是第二個SPI實現類");
}
}
複製程式碼
編寫配置檔案
在src根目錄建立資料夾META-INF/services,在建立的資料夾下面建立一個檔案,命名為SPI介面的全路徑名,並寫上需要動態載入的實現類的全路徑名:
com.spi.FirstSpiImpl
com.spi.SecondSpiImpl
複製程式碼
編寫執行程式
package com.spi;
import java.util.ServiceLoader;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) {
ServiceLoader<ISpi> serviceLoader = ServiceLoader.load(ISpi.class);
for (ISpi service : serviceLoader) {
service.say();
}
}
}
複製程式碼
輸出內容為
我是第一個SPI實現類 我是第二個SPI實現類
讀者可以隨意增刪配置內容,檢視具體輸出。
檔案結構圖
關於SPI入門學習只需要看到這就可以來,下一篇文章會從JDK原始碼角度來詳細分析SPI原理,敬請關注~~