Dubbo 源码剖析与实战
何辉
平安壹钱包架构师
4711 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
开篇词 (1讲)
Dubbo 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

14|SPI 机制:Dubbo的SPI比JDK的SPI好在哪里?

你好,我是何辉。今天我们来深入研究 Dubbo 源码的第三篇,SPI 机制。
SPI,英文全称是 Service Provider Interface,按每个单词翻译就是:服务提供接口。很多开发底层框架经验比较少的人,可能压根就没听过这个 SPI 机制,我们先简单了解一下。
这里的“服务”泛指任何一个可以提供服务的功能、模块、应用或系统,这些“服务”在设计接口或规范体系时,往往会预留一些比较关键的口子或者扩展点,让调用方按照既定的规范去自由发挥实现,而这些所谓的“比较关键的口子或者扩展点”,我们就叫“服务”提供的“接口”。
比较常见的 SPI 机制是 JDK 的 SPI,你可能听过,其实 Dubbo 中也有这样的机制,在前面章节中,我们接触过利用 Dubbo 的 SPI 机制将过滤器的类路径配置到资源目录(resources)下,那为什么有了 JDK 的 SPI 后,还需要有 Dubbo 的 SPI 呢?究竟 Dubbo 的 SPI 比 JDK 的 SPI 好在哪里呢?
带着这个问题,我们开始今天的学习。

SPI 是怎么来的

首先要明白 SPI 到底能用来做什么,我们还是结合具体的应用场景来思考:
app-web 后台应用引用了一款开源的 web-fw.jar 插件,这个插件的作用就是辅助后台应用的启动,并且控制 Web 应用的核心启动流程,也就是说这个插件控制着 Web 应用启动的整个生命周期。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Dubbo的SPI机制相比JDK的SPI机制更灵活,允许自定义接口规范,并通过ServiceLoader加载实现类。文章深入探讨了SPI机制的应用场景和实现原理,以及Dubbo如何通过ExtensionLoader类实现SPI思想,提供了O(1)的时间复杂度来获取指定的实例对象,并控制缓存创建出来的对象,做到按需加载获取指定实现类。通过对比分析,读者能够了解Dubbo的SPI机制相对于JDK的SPI机制的优势所在。Dubbo的SPI机制不仅可以用来提供框架扩展,还可以用来替换组件,为读者提供了清晰的应用思路。 文章还提到了JDK SPI和Dubbo SPI的使用步骤,以及对比分析了它们的优劣势。此外,还留下了两个思考题,分别是研究Dubbo SPI的底层加载逻辑和总结Spring SPI的使用步骤。另外,还简要介绍了Spring与Mybatis的有机结合使用的源码层面。 总的来说,本文深入探讨了SPI机制的应用和实现原理,以及Dubbo SPI相对于JDK SPI的优势,为读者提供了清晰的应用思路和思考题,适合对SPI机制感兴趣的读者阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Lum
    dubbo得spi加载还是要依赖java的spi的 在 loadLoadingStrategies策略中调用原生的ServiceLoador加载dubbo的load策略,记录一下,另外dubbo的spi还支持自适应扩展等,老师没有讲解一下

    作者回复: 你好,Lum:这个在 17 章节有讲,你的思绪跳跃有点超前,棒棒滴,预判了我的未来预判,哈哈~

    2023-03-01归属地:北京
    2
    1
  • 小华
    老师你好,有两个问题: 1、JDK SPI的示例代码中,我运行main函数没有得到打印,调试发现while(it.hasNext())没有进去,是因为我用了JDK17吗? 2、trpc-go的插件化设计也是通过实现框架预定义的标准接口,支持开发者自己实现,利用配置文件注入,和Dubbo SPI有什么区别吗
    2023-12-28归属地:广东
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部