1. 程式人生 > >dubbo spi解析

dubbo spi解析

1. 什麼叫SPI?

簡單總結就是一種使用類名字串來動態例項化java類的方式,也就是反射。

2. java SPI與Dubbo SPI有什麼區別

然後在這個檔案裡面寫入實現類

com.blueskykong.javaspi.serializer.KryoSerializer

com.blueskykong.javaspi.serializer.JavaSerializer

 

但是dubbo的SPI格式變了,也就意味著不能直接使用java SPI了

檔案的目錄相似,但是裡面的內容變為了key-value

adaptive=com.alibaba.dubbo.common.extension.factory.AdaptiveExtensionFactory
spi=com.alibaba.dubbo.common.extension.factory.SpiExtensionFactory

結論:所謂的這些SPI只不過是一種方式而已,最後都是反射生成類(還有classloader的問題,這裡我們不討論),組織方式可以隨便變,但是既然是分析dubbo,那麼這裡就看dubbo是怎麼最終實現的

3. 為什麼dubbo要自己實現所謂的SPI?

dubbo相當於使用了key-value的形式,用key來對映每個類,這樣使用者就可以在url加入這個key來實現動態載入某個類的需求,為什麼java SPI的方式不行,

無法提供一個規則給使用dubbo的人,可以讓他指定要使用哪個類。

4.dubbo spi實現方式詳解

4.1 背景

現在使用key-value的方式已經可以由使用者指定key去載入class,但是出於系統的考慮還有一些功能需要擴充套件

  • key-value的指定是由@Adaptive和@SPI來輔助實現,SPI指定類級別的預設的類,Adaptive可以設定函式級別需要載入哪個class
  • 針對FIlter需要指定是否起效,以及在provider起效還是consumer起效,以及Filter之間的優先順序