Dubbo之SPI实现原理详解

 我来答
完满且闲雅灬抹香鲸P
2022-07-16 · TA获得超过1.8万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:73.3万
展开全部

 SPI全称为Service Provider Interface,是一种服务提供机制,比如在现实中我们经常会有这种场景,就是对于一个规范定义方而言(可以理解为一个或多个接口),具体的服务实现方是不可知的(可以理解为对这些接口的实现类),那么在定义这些规范的时候,就需要规范定义方能够通过一定的方式来获取到这些服务提供方具体提供的是哪些服务,而SPI就是进行这种定义的。

说明:



Dubbo 的扩展点加载是基于JDK 标准的 SPI 扩展点发现机制增强而来的,Dubbo 改进了 JDK 标准的 SPI 的以下问题:


dubbo对于SPI的实现主要是在ExtensionLoader这个类中,这个类主要有三个方法:


如下是getExtension()方法的源码:



createExtension()方法的源码:

在createExtension()方法中,其主要做了三件事:

关于wrapper对象,这里需要说明的是,其主要作用是为目标对象实现AOP。wrapper对象有两个特点:



getExtensionClasses()方法的源码



loadDirectory()方法的源码:



loadClass()方法的源码

loadClass()方法主要作用是对子类进行划分,这里主要划分成了三部分:

总结而言,getExtension()方法主要是获取指定名称对应的子类。在获取过程中,首先会从缓存中获取是否已经加载过该子类,如果没加载过则通过定义文件加载,并且使用获取到的wrapper对象封装目标对象返回。




getAdaptiveExtension()方法源码



已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华南检测机构
2025-03-04 广告
ASTM D4169测试是由美国材料与试验协会制定的标准,全称为“运输集装箱和系统性能检测的标准实施规程”。该测试旨在模拟运输过程中可能遇到的各种恶劣条件,如振动、冲击、压缩和温度变化等,全面评估包装系统的性能和可靠性。华南包装技术(东莞)... 点击进入详情页
本回答由华南检测机构提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式