利用Java SPI 機制優化代碼結構

利用Java SPI 機制優化代碼結構

什麼是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. 定義一組接口;

利用Java SPI 機制優化代碼結構

2. 定義接口的一個或多個實現 :cashCharge 和assureCharge 的實現

利用Java SPI 機制優化代碼結構

利用Java SPI 機制優化代碼結構

3. 添加配置文件

在src/main/resources/ 下建立/META-INF/services 目錄,

3.1 創建 xxx.xxx.Charge 文件(文件名為接口文件的全路徑名)

3.2 添加文件內容:(實現類的全路徑名)

xxx.AssureChargeHandler

xxx.CashChargeHandler

4. 使用ServiceLoader 來加載配置文件中指定的實現

利用Java SPI 機制優化代碼結構

利用Java SPI 機制優化代碼結構

5. 實現方式

5.1 設置引用

利用Java SPI 機制優化代碼結構

5.2 根據transType 參數動態運行,確定不同類

利用Java SPI 機制優化代碼結構


分享到:


相關文章: