带你阅读dubbo源码之通过SPI装载扩展(一)

来源:互联网 发布:广州cda数据分析培训 编辑:程序博客网 时间:2024/04/29 08:29

Dubbo(https://github.com/alibaba/dubbo)是阿里开源的一个分布式服务框架,以及SOA治理方案。其功能主要包括:

· 高性能NIO通讯及多协议集成,

· 服务动态寻址与路由,

· 软负载均衡与容错,

· 依赖分析与降级等。

篇章一:dubbo 装载Extension流程,以com.alibaba.dubbo.common.extension.ExtensionFactory为例

启动类:com.alibaba.dubbo.container.Main

  1. 首先会静态加载Container容器扩展通过@SPI注释标识


请输入图片描述

Container扩展加载目录

请输入图片描述

通过ExtensionLoader(Class<?> type)构造函数实例化调用getExtensionLoader方法进行扩展装载:

当class传入类型不是ExtensionFactory.class的时候,创建ExtensionLoader调用getAdaptiveExtension开始装载扩展。

请输入图片描述

请输入图片描述

加载过程:

请输入图片描述

加载目录:META-INF/dubbo/internal/

加载文件名:META-INF/dubbo/internal/com.alibaba.dubbo.common.extension.ExtensionFactory

请输入图片描述

请输入图片描述

请输入图片描述

通过文件找到要加载的扩展进行处理:

如果是@Adaptive则缓存该adaptiveClass,否则实力化扩展及缓存在本地

请输入图片描述

请输入图片描述

最终扩展装载完成!dubbo内置了很多扩展模块,了解了dubbo是怎么装载扩展的,你也可以为dubbo写自己的扩展了:) 。

方法:

1.保证扩展文件在以下三个目录:

META-INF/services/

META-INF/dubbo/

META-INF/dubbo/internal

2.目录里同时创建一个以服务接口命名的文件

比如:META-INF/dubbo/internal/com.alibaba.dubbo.common.extension.ExtensionFactory

3.文件里边就是实现该服务接口的具体实现类

比如:

adaptive=com.alibaba.dubbo.common.extension.factory.AdaptiveExtensionFactory

spi=com.alibaba.dubbo.common.extension.factory.SpiExtensionFactory

0 0
原创粉丝点击