使用 Java SPI 簡單示例
SPI擴充套件
SPI 全稱為 Service Provider Interface,是一種服務發現機制。SPI 的本質是將介面實現類的全限定名配置在檔案中,並由服務載入器讀取配置檔案,載入實現類。這樣可以在執行時,動態為介面替換實現類。正因此特性,我們可以很容易的通過 SPI 機制為我們的程式提供拓展功能。
SPI 示例
Java SPI 示例
前面簡單介紹了 SPI 機制的原理,本節通過一個示例演示 Java SPI 的使用方法。首先,我們定義一個介面,名稱為 Robot。
public interface Robot { void sayHello(); }
接下來定義兩個實現類,分別為 OptimusPrime 和 Bumblebee。
public class OptimusPrime implements Robot { @Override public void sayHello() { System.out.println("Hello, I am Optimus Prime."); } } public class Bumblebee implements Robot { @Override public void sayHello() { System.out.println("Hello, I am Bumblebee."); } }
在 src/main/resources/ 下建立 /META-INF/services 目錄,新建一個檔案,名稱為 Robot 的全限定名 org.apache.spi.Robot。
檔案位置:
- src -main -resources - META-INF - services - org.apache.spi.Robot
檔案內容為實現類的全限定的類名,如下:
org.apache.spi.OptimusPrime org.apache.spi.Bumblebee
做好所需的準備工作,接下來編寫程式碼進行測試。
public class JavaSPITest { @Test public void sayHello() throws Exception { ServiceLoader<Robot> serviceLoader = ServiceLoader.load(Robot.class); System.out.println("Java SPI"); for (Robot robot : serviceLoader) { robot.sayHello(); } } }
最後來看一下測試結果,如下:
從測試結果可以看出,我們的兩個實現類被成功的載入,並輸出了相應的內容。
Reference
https://blog.csdn.net/shang_xs/article/details/86560469
https://www.jianshu.com/p/46b42f7f593c