Dubbo
2020-06-24 10:50:47 61 举报
AI智能生成
dubbo源码导读
作者其他创作
大纲/内容
SPI
1.配置文件放置在META-INF/dubbo路径下
2.ExtensionLoader.getExtensionLoader(Robot.class)获取ExtensionLoader实例
3.extensionLoader.getExtension('optimusPrime)加载扩展类实例对象
1.检查缓存中是否有目标对象,如果有直接返回,否则创建拓展对象
2.createExtension('optimusPrime')
1.getExtensionClasses从配置文件中加载所有扩展类,得到'配置项名称'到'配置类'的映射关系表
2.通过反射创建扩展对象
3.向拓展对象中注入依赖
4.将拓展对象包裹在响应的Wrapper对象中
自适应拓展机制
Adaptive注解
通过ExtensionLoader.getExtensionLoader(FruitGranter.class).getAdaptiveExtension()获取一个FrutiGranter对象
1.调用 getAdaptiveExtensionClass 方法获取自适应拓展 Class 对象
1.调用 getExtensionClasses 获取所有的拓展类
2.检查缓存,若缓存不为空,则返回缓存
3.若缓存为空,则调用 createAdaptiveExtensionClass 创建自适应拓展类
1.构建自适应拓展代码
1.Adaptive注解检测
2.生成类
3.生成方法
1.无 Adaptive 注解方法代码生成逻辑
2.获取URL数据
3.获取Adapative注解值
4.检查Invocation参数
5.生成拓展名获取逻辑
6.生成拓展加载与目标方法调用逻辑
7.生成完整的方法
2.获取编译器实现类
3.编译代码,生成class
2.通过反射进行实例化
3.调用 injectExtension 方法向拓展实例中注入依赖
使用该FruitGranter调用其自适应标注的方法,获取调用结果
0 条评论
下一页