java 的spi方式可以動态的加載擴充類,但是用法不是很靈活,dubbo架構因為存在多個擴充點是以實作了自定義的一種擴充方式,也就是實作了作者提到的微核心,插件式的思路。
比如,需要擴充dubbo的協定,隻需在xxx.jar中放置:
檔案:meta-inf/services/com.alibaba.dubbo.rpc.protocol
内容為:com.alibaba.xxx.xxxprotocol
dubbo通過serviceloader掃描到所有protocol實作。
這樣的一種擴充思路本身是非常符合oo的思想,如果要擴充一種新的實作,隻需要配置和新寫實作即可,甚至不需要動原來的jar包,直接放在擴充包。當每一個地方都使用擴充的時候就出現了一種管道式的架構。

在dubbo架構的每一個有多種實作或者潛在實作的關鍵點,作者都使用了這種方式,實作了微核心,插件式的開發模式。之前對以微核心這種思想一直了解的不是很深入,看了dubbo後,有了新的認識。此外作者在這些切入點還支援包裝和過濾監聽等功能,當有個性化的需求的時候是很容易切入這個點。此為為了管理這些擴充點,dubbo實作了一個龐大的工廠類來支援或者和加載這些類,而具體需要使用什麼具體擴充執行個體,都是通過上層傳遞的參數來确定的。通過這樣的設計:
1、實作了微核心。通過這種方式,代碼的關鍵代碼非常的少,主流程邏輯非常清楚,在設計最初對細節不是很确定的情況下,但是主要流程固定的情況下可以使用這種方式,将後來的需求作為實作,個人化的需求,可以作為插件的監聽或者連接配接器配置,這樣可以使得主流程非常的清晰,也符合oo的思想。
2、便于測試。因為使用了這樣的方式,每個功能點都是擴充,可以針對每個點進行測試,每個元件因為都隻承擔了一個功能,是以可以針對一個功能點進行測試。
3、便于擴充,當需需求變化需要變動功能時,可以針對擴充點進行寫新的實作。或者開發新的插件,這樣不會動到原來的東西。
總之,dubbo是一個良好的微核心插件式的例子,通過對dubbo的學習,可以領悟這種設計的優點和可擴充性,進而對了解oo思想也很有幫助。