什麼是spi
SPI 英文全稱為(Service Provider Interface) ,是JDK內置的一種服務提供發現機制。在數據庫DriverManager、Spring等實現都用到了SPI機制。JavaSPI 的本質是基於策略模式,根據接口配置文件,以接口的編程的形式對外提供服務。
SPI原理機制
當服務的提供者提供了服務接口的實現後,在jar包的META-INF/services/目錄裡同時創建一個以服務接口命名的文件。該文件裡就是實現該服務接口的具體實現類。而當外部程序裝配這個模塊的時候,就能通過META-INF/services/裡的配置文件類名,裝載並實例化。
應用場景
在oop思想中,模塊之間是基於藉口編程,也就是說,模塊之間對實現類不進行硬編碼,而是在運行時,動態尋找服務實現機制,這也就需要一種服務發現機制,而spi正是提供了這種全套的解決方案,可以大幅提高代碼代碼規範以及簡潔度。
實踐舉例
場景:定義charge接口,根據業務傳遞commandName 參數,動態實現CashCharge 或AssureCharge,以下是具體操作步驟:
1. 定義一組接口;
2. 定義接口的一個或多個實現 :cashCharge 和assureCharge 的實現
3. 添加配置文件
在src/main/resources/ 下建立/META-INF/services 目錄,
3.1 創建 xxx.xxx.Charge 文件(文件名為接口文件的全路徑名)
3.2 添加文件內容:(實現類的全路徑名)
xxx.AssureChargeHandler
xxx.CashChargeHandler
4. 使用ServiceLoader 來加載配置文件中指定的實現
5. 實現方式
5.1 設置引用
5.2 根據transType 參數動態運行,確定不同類
閱讀更多 程序員老白 的文章