17|Adaptive适配:Dubbo的Adaptive特殊在哪里?
何辉
你好,我是何辉。
有了上一讲“Compiler 编译”的基础,相信你在今天 Dubbo 源码第六篇 Adaptive 适配,会比较轻松。
其实 Adaptive 我们见过好几次了。还记得在“SPI 机制”中提到的 ExtensionLoader 类么,我们在认真研究 ExtensionLoader 源码时,发现这个类里有一个获取自适应扩展点的方法(getAdaptiveExtension)。
深入 Dubbo SPI 机制的底层原理时,在加载并解析 SPI 文件的逻辑中,你会看到有一段专门针对 Adaptive 注解进行处理的代码;在 Dubbo 内置的被 @SPI 注解标识的接口中,你同样会看到好多方法上都有一个 @Adaptive 注解。
这么多代码和功能都与 Adaptive 有关,难道有什么特殊含义么?Adaptive 究竟是用来干什么的呢?我们开始今天的学习。
自适应扩展点
照例还是从直接的方式——代码着手,我们就先从 ExtensionLoader 的 getAdaptiveExtension 方法开始吧。
不过,一开始就有点小障碍,从 ExtensionLoader 的使用方式上看,我们得找个接口传进去,但是这一时半会也不知道传什么接口才好啊。
别慌,回忆我们在“点点直连”学过一个小技巧,如果不知道源码的某个方法如何使用,最好的第一手资料就是源码,从源码中寻找别人使用这个方法的正确姿势。按照小技巧的思路,看下 getAdaptiveExtension 方法有多少个方法被调用。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Dubbo中的Adaptive特性在SPI机制中具有重要性和灵活性。Adaptive不仅在ExtensionLoader类中提供了获取自适应扩展点的方法,还在SPI文件加载和解析逻辑中处理Adaptive注解。通过动态生成源代码和代理逻辑,Adaptive实现了动态适配,使得Dubbo能够根据不同条件选择合适的实现。文章深入分析了Dubbo中Adaptive的实现机制,揭示了其在SPI机制中的重要性和灵活性。Adaptive的特殊之处在于其不仅出现在SPI接口的方法上,还会出现在SPI接口的实现类上,因此自适应扩展点有两个来源,实现类和生成的代理类。当获取自适应扩展点时,若实现类上有@Adaptive注解,则优先使用这个实现类作为自适应扩展点。文章还提供了验证源码推测的Demo样例,通过验证方案一和验证方案二的实施结果,充分验证了探索源码的结论。最后,文章探讨了Adaptive适配的应用思想,指出Dubbo的这种思想很值得借鉴,但也提出了该机制可能存在的缺点。整体而言,本文通过深入分析Dubbo中Adaptive的实现机制,为读者深入理解Dubbo的SPI机制和灵活的扩展能力提供了重要参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》,新⼈⾸单¥59
《Dubbo 源码剖析与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- Ahaolinhttps://ahaolin-public-img.oss-cn-hangzhou.aliyuncs.com/img/202303030954605.png
作者回复: 你好,Ahaolin:非常 nice,点赞~
2023-03-03归属地:浙江1 - Lum这里在生成代理类得时候会根据该注解判断是否有value值,如果没有就通过小写字母分开为点camelToSplitName,如果有就按照注解的value值进行赋值
作者回复: 你好,Lum:没看懂,看了半天,没意会是哪个细小环节,尴尬啦~
2023-03-02归属地:北京 - Lum老师讲的真好,层层深入,对dubbo的spi有了更深的理解了,期待学完课把dubbo所有的流程串起来
作者回复: 你好,Lum:你可以的,为你点赞,加油@_@
2023-03-01归属地:北京
收起评论