dubbo源码深度剖析
2024-06-28 15:09:17 3 举报
AI智能生成
dubbo
作者其他创作
大纲/内容
ScopeModel
原理图
SPI机制
子主题
@SPI("值")
用法和梳理关系图【@SPI,只能作用于接口上】
@Adtivate
自适应扩展点注解【一个接口往往会有多种实现类,Dubbo通过URL中的某些参数来动态控制实现类的选择】
@Adaptive作为标记实现了一个适配器类,并且这个类是动态生成【javassist技术实现】
可以通过配置文件来动态的使用想要的接口实现类,并且不用改变任何接口的代码,简单来说其也是通过代理来实现的
子主题
@Activate
可以根据你的入参,动态选择实现一批符合条件的实现类
参数
group()指定组条件。框架SPI定义了有效的组值。
value()指定URL条件中的参数key。
SPI提供程序可以调用ExtensionLoader.getActivateExtension(URL, String, String)
来查找给定条件下所有激活的扩展。
来查找给定条件下所有激活的扩展。
javassist技术
javassist是一个字节码修改工具,不需要了解字节码指令
dubbo会给每个服务提供者的实现类生产一个wrapper类
它最终调用服务提供方的接口实现类
【功能增强,再执行业务方法时,可执行植入自己的框架逻辑】
它最终调用服务提供方的接口实现类
【功能增强,再执行业务方法时,可执行植入自己的框架逻辑】
生成这个wrapper类的操作虽然比较麻烦,但是它是在dubbo服务启动时生成的,所以不会对运行时带来开销。【wrapper类的存在是为了减少反射的调用】
使用javassist 的分析
ExtensionLoader
ExtensionLoader.getExtensionLoader的方法获取实例【类型必须是接口、接口上必须标注@SPI】
一夫一妻制【@SPI标注的接口和ExtensionLoader实例是一对一的关系】
ExtensionLoader<CarInterface> extensionLoader = ExtensionLoader.getExtensionLoader(CarInterface.class);
额外
java的spi机制 -- ServiceLoader
虽然我获取到了所有的实现类,但是无法对实现类进行分类,也就是说我无法确定到底该用哪个实现类,
并且java的spi机制会一次性给所有的实现类创建对象,如果这个对象你根本不会使用,
那么此时就会白白浪费资源,也就是说无法做到按需加载。【缺点】
并且java的spi机制会一次性给所有的实现类创建对象,如果这个对象你根本不会使用,
那么此时就会白白浪费资源,也就是说无法做到按需加载。【缺点】
spring的spi机制 -- SpringFactoriesLoader
dubbo的spi机制 -- ExtensionLoader
网络通信
dubbo网络服务器架构剖析
Exchange网络组件
Transporter网络通信组件
NettyServer构建和打开
0 条评论
下一页