dubbo源码深度解读二之config模块

来源:互联网 发布:js文件md5 编辑:程序博客网 时间:2024/06/15 05:40

前言:config是配置模块,是Dubbo对外的API,用户通过Config使用Dubbo,隐藏Dubbo所有细节。里面包含了dubbo-config-api和dubbo-config-spring。该模块依赖dubbo-common(上篇已经讲过了)和dubbo-rpc(放在后面解读)。

一,dubbo-config-api
这里主要是一些抽象的定义,把配置信息定义为类属性。里面最主要的类为ReferenceConfig和ServiceConfig

1,ReferenceConfig(依赖消费端的配置相关类)
继承关系如下:
这里写图片描述
大概解释一下每个类(源码中的注释已经解释很清楚了)
(1)AbstractConfig:配置解析的工具方法、公共方法,提供几个主要的方法appendAnnotation,appendProperties,appendParameters,appendAttributes。
(2)AbstractMethodConfig:封装了一些方法级别的相关属性
(3)AbstractInterfaceConfig:封装了接口契约需要的属性
(4)AbstractReferenceConfig:主要是引用实例的配置

而ReferenceConfig中,会获取消费者全局配置,然后进行一个初始化。

2,ServiceConfig(为提供服务端的配置相关类,包含一些运行时数据)
继承关系如下:
这里写图片描述
可以看出,继承关系跟ReferenceConfig很像,差别在它最后是实现AbstractServiceConfig(服务相关属性(重在使用运维级别))。
ps:这里设计到了一些rpc模块的,到时候再继续解读

二,dubbo-config-spring
首先我们看到META-INF下面的spring.handlers。可以看到

http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler

接下来我们查看DubboNamespacheHandler

public class DubboNamespaceHandler extends NamespaceHandlerSupport {    static {        Version.checkDuplicate(DubboNamespaceHandler.class);    }    public void init() {        registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));        registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true));        registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));        registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));        registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));        registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));        registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));        registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));        registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));        registerBeanDefinitionParser("annotation", new DubboBeanDefinitionParser(AnnotationBean.class, true));    }}

对应关系如下:
这里写图片描述
对应的每个类源码注解已经写的很清楚了,这里就不重复了。

总结:现在慢慢对dubbo的结构和一些设计思想越来越了解了,接下来将会更加努力看了。