深入理解Java SPI之入門篇

深夜程猿發表於2019-01-06

不做知識的搬運工,堅持原創,閱讀更多文章,歡迎訂閱微信公眾號:深夜程猿

深入理解Java SPI之入門篇

概述

對於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實現類

讀者可以隨意增刪配置內容,檢視具體輸出。

檔案結構圖

深入理解Java SPI之入門篇

關於SPI入門學習只需要看到這就可以來,下一篇文章會從JDK原始碼角度來詳細分析SPI原理,敬請關注~~

相關文章