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
《Dubbo 源码剖析与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- Lumdubbo得spi加载还是要依赖java的spi的 在 loadLoadingStrategies策略中调用原生的ServiceLoador加载dubbo的load策略,记录一下,另外dubbo的spi还支持自适应扩展等,老师没有讲解一下
作者回复: 你好,Lum:这个在 17 章节有讲,你的思绪跳跃有点超前,棒棒滴,预判了我的未来预判,哈哈~
2023-03-01归属地:北京21 - 小华老师你好,有两个问题: 1、JDK SPI的示例代码中,我运行main函数没有得到打印,调试发现while(it.hasNext())没有进去,是因为我用了JDK17吗? 2、trpc-go的插件化设计也是通过实现框架预定义的标准接口,支持开发者自己实现,利用配置文件注入,和Dubbo SPI有什么区别吗2023-12-28归属地:广东
收起评论