為什么dubbo要自己設計一套SPI?

這是原始JDK spi的代碼

ServiceLoaderserviceLoader=ServiceLoader.load(Command.class);?

?for(Command command:serviceLoader){?

?command.execute();

?}?

dubbo在原來的基礎上設計了以下功能

1.原始JDK spi不支持緩存;dubbo設計了緩存對象:spi的key與value 緩存在 cachedInstances對象里面,它是一個ConcurrentMap

2.原始JDK spi不支持默認值,dubbo設計默認值:@SPI("dubbo") 代表默認的spi對象,例如Protocol的@SPI("dubbo")就是 DubboProtocol, 通過 ExtensionLoader.getExtensionLoader(Protocol.class).getDefaultExtension()那默認對象

3.jdk要用for循環(huán)判斷對象,dubbo設計getExtension靈活方便,動態(tài)獲取spi對象, 例如 ExtensionLoader.getExtensionLoader(Protocol.class).getExtension(spi的key)來提取對象

4.原始JDK spi不支持 AOP功能,dubbo設計增加了AOP功能,在cachedWrapperClasses,在原始spi類,包裝了XxxxFilterWrapper XxxxListenerWrapper5.原始JDK spi不支持 IOC功能,dubbo設計增加了IOC,通過構造函數注入,代碼為:wrapperClass.getConstructor(type).newInstance(instance),

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,537評論 19 139
  • 前面我們了解過了Java的SPI擴展機制,對于Java擴展機制的原理以及優(yōu)缺點也有了大概的了解,這里繼續(xù)深入一下D...
    加大裝益達閱讀 5,244評論 2 20
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,642評論 18 399
  • 卷二十七,漢紀十九。時間公元前58年至公元前49年。主要故事有,匈奴內亂五單于爭立,宣帝言“漢家本以霸王道雜之”,...
    賈海昕閱讀 356評論 0 0
  • 央視財經頻道特約心理專家 ▎趙小明 最近小明看到個事例,生活在三線城市的小縣城里的幸福家庭,丈夫在一家私營公司上班...
    心理奶爸閱讀 857評論 0 0

友情鏈接更多精彩內容