java SPI 程式碼示例

lenbkan發表於2024-11-07

SPI 是 Service Provider Interface 的縮寫,中文解釋為服務提供發現介面

SPI 是一種「基於介面的程式設計 + 策略模式 + 配置檔案」組合實現的動態載入介面實現類的機制

實現步驟:

  • 在類路徑下的 META-INF/services 目錄下,建立以服務介面的 "全限定名" 命名的檔案,檔案的內容為介面實現類的全限定名,每行一個介面實現
  • 實現類必須在當前程式的 classpath 下
  • 使用 java.util.ServiceLoader 動態載入介面實現(ServiceLoader 會自動掃描 META-INF/services 下的配置檔案載入實現類)

示例如下:

1、建立介面

package com.test.root.base.spi;

public class FirstSpiService implements SimpleSpiService {
    @Override
    public void say() {
        System.out.println("Say first!");
    }
}

2、實現介面

package com.test.root.base.spi;

public class FirstSpiService implements SimpleSpiService {
    @Override
    public void say() {
        System.out.println("Say first!");
    }
}
package com.test.root.base.spi;

public class SecondSpiService implements SimpleSpiService {
    @Override
    public void say() {
        System.out.println("Say Second!");
    }
}

3、建立 SPI 檔案

java SPI 程式碼示例

SPI檔案內容

com.test.root.base.spi.FirstSpiService
com.test.root.base.spi.SecondSpiService

2、載入並使用介面實現

package com.test.root.base.spi;

import java.util.ServiceLoader;

public class SpiTest {

    public static void main(String[] args) {
        ServiceLoader<SimpleSpiService> simpleSpiServices = ServiceLoader.load(SimpleSpiService.class);
        for (SimpleSpiService simpleSpiService : simpleSpiServices) {
            simpleSpiService.say();
        }
    }

}

相關文章