dubbo spi解析
阿新 • • 發佈:2019-01-08
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之間的優先順序