Dubbo在启动中,如何解析它的配置文件。

Dubbo原理(2)--标签解析

配置文件如图蓝色框内的内容,包括:连向注册中心、远程暴露服务等。


配置文件的配置参考:Dubbo用户文档的如下目录:

Dubbo原理(2)--标签解析

对Dubbo进行配置有多种方法。


因为这个配置文件是一个Spring的配置文件,我们启动也是以Spring的方式进行加载启动:

Dubbo原理(2)--标签解析


Spring来解析配置文件中的标签都会有一个总的接口:BeanDefinitionParser(Bean定义的解析器)

Dubbo原理(2)--标签解析

他的继承中有一个:DubboBeanDefinitionParser(Dubbo的标签解析器)

Dubbo原理(2)--标签解析

其中,parse方法用于解析标签:

Dubbo原理(2)--标签解析

当IOC容器一启动,Spring容器一启动,就会来挨个解析标签。

如果在DubboBeanDefinitionParser的parse方法出打一个断点,会发现项目确实是在parse方法处,会挨个解析标签。


标签解析做了什么?

在parse方法中会有一个判断:

  • 如果Bean的类型等于ProtocolConfig、ServiceBean、ProviderConfig、ConsumerConfig,会怎么办:

Dubbo原理(2)--标签解析

关于Bean的类型,会在parse方法当中传入进来:

Dubbo原理(2)--标签解析

此外,给DubboBeanDefinitionParser的构造器打一个断点,看构造器是如何创建出来的:

Dubbo原理(2)--标签解析

构造器的前一步:DubboNamespaceHandler(Dubbo的名称空间处理器)

处理器注册了很多的标签解析器:

  • 如果是application标签进行解析,就是使用DubboBeanDefinitionParser,使用ApplicationConfig.class,相当于封装标签里面的内容:

Dubbo原理(2)--标签解析

DubboBeanDefinitionParser传过来的class,其实是在DubboNamespaceHandler中的构造初始(new DubboBeanDefinitionParser(xxx, xxx)),就已经硬性规定的。

每一个标签,有每一个标签对应的xxxConfig。


DubboBeanDefinitionParser的parse方法做什么:

  • 获取标签的属性,为每一个标签的bean定义里面,添加对应的属性的值(类似如下):Dubbo原理(2)--标签解析
  • 解析标签的目的:将标签的每一个属性都解析出来,保存到对应的xxxConfig(类型对象)里面。另外,service标签对应的是ServiceBean,而不是ServiceConfig;reference标签对应的是ReferenceBean。
  • service标签的解析牵扯到服务暴露的过程,reference标签的解析牵扯到服务引用的过程;

大致的标签解析流程图(不含服务暴露/引用的过程):

Dubbo原理(2)--标签解析

相关文章: