Python知识分享网 - 专业的Python学习网站 学Python,上Python222
深度解析Dubbo的可扩展机制SPI源码:从理论到实践,打造高效、稳定的分布式服务框架 PDF 下载
发布于:2024-01-31 10:53:23
(假如点击没反应,多刷新两次就OK!)

深度解析Dubbo的可扩展机制SPI源码:从理论到实践,打造高效、稳定的分布式服务框架 PDF 下载  图1

 

 

资料内容:

 

ExtensionLoader表示某个接⼝的扩展点加载器,可以⽤来加载某个扩展点实例。
在ExtensionLoader中除开有上⽂的static的Map外,还有两个⾮常重要的属性:
1. Class<?> type:表示当前ExtensionLoader实例是哪个接⼝的扩展点加载器
2. ExtensionFactory objectFactory:扩展点⼯⼚(对象⼯⼚),可以获得某个对象
ExtensionLoader和ExtensionFactory的区别在于:
1. ExtensionLoader最终所得到的对象是Dubbo SPI机制产⽣的
2. ExtensionFactory最终所得到的对象可能是Dubbo SPI机制所产⽣的,也可能是从Spring容器中所获
得的对象
在ExtensionLoader中有三个常⽤的⽅法:
1. getExtension("dubbo"):表示获取名字为dubbo的扩展点实例
2. getAdaptiveExtension():表示获取⼀个⾃适应的扩展点实例
3. getActivateExtension(URL url, String[] values, String group):表示⼀个可以被url激活的扩展点
实例,后⽂详细解释
其中,什么是⾃适应扩展点实例?它其实就是当前这个接⼝的⼀个代理对象。

1 ExtensionLoader<Protocol> extensionLoader = ExtensionLoader.getExt
ensionLoader(Protocol.class);
2 Protocol protocol = extensionLoader.getExtension("dubbo");


当我们调⽤上述代码,我们会将得到⼀个DubboProtocol的实例对象,但在getExtension()⽅法中,
Dubbo会对DubboProtocol对象进⾏依赖注⼊(也就是⾃动给属性赋值,属性的类型为⼀个接⼝,记为A
接⼝),这个时候,对于Dubbo来说它并不知道该给这个属性赋什么值,换句话说,Dubbo并不知道在进
⾏依赖注⼊时该找⼀个什么的的扩展点对象给这个属性,这时就会预先赋值⼀个A接⼝的⾃适应扩展点实
例,也就是A接⼝的⼀个代理对象。
后续,在A接⼝的代理对象被真正⽤到时,才会结合URL信息找到真正的A接⼝对应的扩展点实例进⾏调
⽤。