1. 程式人生 > >dubbo-源碼閱讀之javaspi

dubbo-源碼閱讀之javaspi

自己實現 XML 框架 public 發現 同名 res 相關 對象創建

dubbo可擴展的點的類的對象創建 都是用類似javaspi的思想來做的。所以看後面代碼 先熟悉一下java的SPI實現

如ServicesConfig的代碼

private static final Protocol protocol = (Protocol)ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();

JAVASPI的作用

服務(接口實現類)的自動發現。我們定義好一組接口標準。而具體實現調用者根據自身需求自己實現

JavaSPI簡單使用

我們模擬我們做了一個框架(jar) 框架的正常運行需要相關配置。配置加載方式由使用者來實現

1.定義接口

/**
 * 加載配置文件的句柄
 */
public interface LoadConfigHandle {
    public String  load();
}

2.定義實現類

public class HttpLoadConfigHandle implements LoadConfigHandle {
    public String load() {
        System.out.println("正在用http請求加載配置文件數據");
        return "";
    }
}
public class
XmlLoadConfigHandle implements LoadConfigHandle { public String load() { System.out.println("正在加載配置文件xml"); return ""; } }

在resource創建META-INF文件夾,再創建一個與接口全名稱同名的文件。將實現類配置進去

技術分享圖片

com.liqiang.spi.XmlLoadConfigHandle
com.liqiang.spi.HttpLoadConfigHandle

3測試

    public
static void main(String[] str) throws InterruptedException { ServiceLoader<LoadConfigHandle> serviceLoader = ServiceLoader.load(LoadConfigHandle.class); Iterator<LoadConfigHandle> iterator = serviceLoader.iterator(); while (iterator.hasNext()) { LoadConfigHandle loadConfigHandle = iterator.next(); loadConfigHandle.load(); } }

技術分享圖片

dubbo-源碼閱讀之javaspi