spi 的全稱是 service provider interface, 它是jdk內建的一種服務提供發現機制。
常用於框架設計中:執行時動態為介面提供實現。

實現案例: servlet3.0以後,可以不用web.xml來作專案的入口,而是用spi機制。

spi的使用:

  1. 在類路徑下新增目錄:META-INF/services
  2. 在新增的目錄中以要實現的介面的全類名為檔名新增一個文字檔案
  3. 在文字檔案中新增介面的實現類的全類名(一個實現類佔一行)

示例程式碼:

  1. 介面與實現類
    在這裡插入圖片描述

  2. META-INF/services 目錄與內容
    在這裡插入圖片描述

  3. 程式碼

public static void main(String[] args) {
    
    ServiceLoader<Hello> hellos = ServiceLoader.load(Hello.class);
    
    Iterator<Hello> iterator = hellos.iterator();
    
    while (iterator.hasNext()){
        iterator.next().hello();
    }
}