Dubbo核心實現之SPI簡單

2021-08-03 01:14:43 字數 1474 閱讀 9259

dubbo採用

jdk實現spi服務查詢: serviceloader

首先定義下示例介面

package com.example;

public inte***ce spi {

booleanissupport(string name);

string sayhello();

serviceloader會遍歷所有jar查詢meta-inf/services/com.example.spi檔案

a廠商提供實現

package com.a.example;

public class spiaimpl implements spi {

publicboolean issupport(string name) {

return」spia」.equalsignorecase(name.trim()); 

public string syahello() {

return 「hello 我是廠商a」;

在a廠商提供的jar包中的meta-inf/services/com.example.spi檔案內容為:

com.a.example.spiaimpl        #廠商a的spi實現全路徑類名

b廠商提供實現

package com.b.example;

public class spibimpl implements spi {

publicboolean issupport(string name) {

return」spib」.equalsignorecase(name.trim()); 

public string syahello() {

return 「hello 我是廠商b」;

在b廠商提供的jar包中的meta-inf/services/com.example.spi檔案內容為:

com.b.example.spibimpl        #廠商b的spi實現全路徑類名

serviceloader.load(spi.class)讀取廠商a、b提供jar包中的檔案,serviceloader實現了iterable介面可通過while for迴圈語句遍歷出所有實現。

乙個介面多種實現,就如策略模式一樣提供了策略的實現,但是沒有提供策略的選擇, 使用方可以根據issupport方法根據業務傳入廠商名來選擇具體的廠商。

public class spifactory {

//讀取配置獲取所有實現

privatestatic serviceloader spiloader = serviceloader.load(spi.class);

//根據名字選取對應實現

publicstatic spi getspi(string name) {

for(spi spi : spiloader) {

if(spi.issupport(name) ) {

returnspi;

returnnull;

Dubbo核心實現之SPI簡單介紹

這個部分單獨寫一頁,看起來更高大上一些。1.概括 dubbo採用微核心 外掛程式體系,使得設計優雅,擴充套件性強。那所謂的微核心 外掛程式體系是如何實現的呢!jdk實現spi服務查詢 serviceloader 2.定義示例介面 serviceloader會遍歷所有jar查詢meta inf ser...

Dubbo核心解析 SPi(二)

spring的aop理解 spring的aop增強方式一共有5種,分別為 增強型別 應用場景 前置增強 許可權控制 記錄呼叫日誌 後置增強 統計分析結果資料 異常增強 通過日誌記錄方法異常資訊 最終增強 釋放資源 環繞增強 快取 效能 許可權 事務管理 通過以下方式理解記憶 try catch fi...

1 Dubbo實現SPI之 JDK介紹

jdk通過serviceloader類實現spi機制的服務查詢功能。我們來看下jdk是如何實現 jdk實現spi服務查詢 serviceloader。package com.test public inte ce spi string sayhello serviceloader會遍歷所有jar查詢...