Dubbo在启动中,如何解析它的配置文件。
配置文件如图蓝色框内的内容,包括:连向注册中心、远程暴露服务等。
配置文件的配置参考:Dubbo用户文档的如下目录:
对Dubbo进行配置有多种方法。
因为这个配置文件是一个Spring的配置文件,我们启动也是以Spring的方式进行加载启动:
Spring来解析配置文件中的标签都会有一个总的接口:BeanDefinitionParser(Bean定义的解析器)
他的继承中有一个:DubboBeanDefinitionParser(Dubbo的标签解析器)
其中,parse方法用于解析标签:
当IOC容器一启动,Spring容器一启动,就会来挨个解析标签。
如果在DubboBeanDefinitionParser的parse方法出打一个断点,会发现项目确实是在parse方法处,会挨个解析标签。
标签解析做了什么?
在parse方法中会有一个判断:
- 如果Bean的类型等于ProtocolConfig、ServiceBean、ProviderConfig、ConsumerConfig,会怎么办:
关于Bean的类型,会在parse方法当中传入进来:
此外,给DubboBeanDefinitionParser的构造器打一个断点,看构造器是如何创建出来的:
构造器的前一步:DubboNamespaceHandler(Dubbo的名称空间处理器)
处理器注册了很多的标签解析器:
- 如果是application标签进行解析,就是使用DubboBeanDefinitionParser,使用ApplicationConfig.class,相当于封装标签里面的内容:
DubboBeanDefinitionParser传过来的class,其实是在DubboNamespaceHandler中的构造初始(new DubboBeanDefinitionParser(xxx, xxx)),就已经硬性规定的。
每一个标签,有每一个标签对应的xxxConfig。
DubboBeanDefinitionParser的parse方法做什么:
- 获取标签的属性,为每一个标签的bean定义里面,添加对应的属性的值(类似如下):
- 解析标签的目的:将标签的每一个属性都解析出来,保存到对应的xxxConfig(类型对象)里面。另外,service标签对应的是ServiceBean,而不是ServiceConfig;reference标签对应的是ReferenceBean。
- service标签的解析牵扯到服务暴露的过程,reference标签的解析牵扯到服务引用的过程;
大致的标签解析流程图(不含服务暴露/引用的过程):