Dubbo SPI 使用方法(三)- 擴展點自動裝配

開篇

前面已經講到了:segmentfault

Dubbo SPI 的使用方法(一)- 擴展點自動包裝函數

Dubbo SPI 使用方法(二)- 擴展點自適應this

本文來說下 Dubbo SPI - 擴展點自動裝配, 即 Dubbo 實現的 IOC , 用一段簡單代碼來解釋下:code

當實例化 A 時, 發現 A 依賴了 B, 而且有對應的 set 注入方法, 那麼 Dubbo 就會順便把 B 也實例化, 並注入到 A 對象中.對象

public class A {
    
    private B b;
    
    public void setB(B b) {
        this.b = b;
    }
    
}

正文

1. 概念

上面簡單的介紹了 IOC, 那麼接下來看看 Dubbo SPI - 擴展點自動裝配是如何作的.接口

引用官網的一段介紹

加載擴展點時,自動注入依賴的擴展點。get

加載擴展點時,擴展點實現類的成員若是爲其它擴展點類型,ExtensionLoader 在會自動注入依賴的擴展點。io

ExtensionLoader 經過掃描擴展點實現類的全部 setter 方法來斷定其成員。即 ExtensionLoader 會執行擴展點的拼裝操做。class

2. 使用

2.1 定義擴展接口

interface ServiceA {
    void sayA();
}

2.2 定義擴展接口實現類

// 實現類
public class ServiceAImpl implements ServiceA {
    
    private ServiceB serviceB;
    
    public void setB(ServiceB serviceB) {
        this.serviceB = serviceB;
    }
    
    public void sayA() {
        System.out.println("service A")
        serviceB.sayB();
    }
}

// 須要注入的類
public class ServiceB {
    public void sayB(){
        System.out.println("service B")
    }
}

2.3 MATA-INF/dubbo/com.nimo.spi.IA

serviceA=com.nimo.spi.ServiceAImpl

2.4 啓動函數

ExtensionLoader<ServiceA> extensionLoader = 
            ExtensionLoader.getExtensionLoader(ServiceA.class);
ServiceA serviceA = extensionLoader.getExtension("serviceA");
serviceA.sayA();

2.5 運行結果

打印以下:擴展

service A
service B

總結

Dubbo SPI - 擴展點自動裝配(Dubbo IOC), 實現了相似 Spring IOC 的功能, 也就是在加載擴展實現類 (好比 ServiceA) 時, 若是檢測到該類依賴了其餘類 (ServiceB), Dubbo 就會把依賴類進行實例化, 而且經過 set 方法注入到該對象中(ServiceA).

相關文章
相關標籤/搜索