开发者学堂课程【阿里巴巴分布式服务框架 Dubbo 快速入门:标签解析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/624/detail/9478
标签解析
double 在启动过程中如何来解析它的配置文件。所有的配置写在 double 的配置文件中,特别是远程暴露服务,包括影像注册中心等等。
1、解析原理
因为配置文件是一个 spring 的配置文件,启动也是以 spring 的方式加载启动。 spring 来解析配置文件中,每一个标签都会有一个总接口叫 bean definition parser 定义的解析器。
解析器的继承树有一个叫 dubbo bean definition partner 的 dubobo 的标签解析器,有一个 pass 方法,在这解析标签。IOC 容器一启动,遍历解析每个标签。
第一个元素是 dubbo application,第二个是 dubbo registry,第三个是 double protocol,每一个标签都会解析
2、标签作用
获取标签的 ID,包括标签的名字,一些默认名,这都是一些生成规则。
放行以后会有一个判断,如果说这个 being 的类型等于 political config,我们这个协议的配置就怎么办?
如果说这个类型等于 service being 怎么办
如果说这个类型等于 provider config 怎么办?
如果这个类型等于 consumer config 怎么办等等,
它是如何判断出这个类型的?
当前这一次传进来的类型是 protocol config。
下一次是 service Beaning,是轮到解析 service 标签了。
可以看到这是 method config,是因为 service 标签里边有 method 的配置。
这是 provider config,service 配完就是 provide 的配置
service
又是一个 methodconfig, Service,里面有 method
接下来就是 MonitorConfig
3、每一个标签对应一个 beanclass
由于这个东西是来做 beaning 的标签解析器的,所以给构造器打一个断点,看构造器是怎么创建出来的。
来到构造器的前一步,会发现有一个叫 doubleName spaceHandler 的名称、空间、处理器,这个处理器在这注册了非常多的标签解析器,如果 application 标签解析,就用 beandefinitionParser,然后 ApplicationConfig 相当于封装标签里边的内容。
比如说传过来的 class,其实就是在构造初始人家硬性规定的,每一个标签就有每一个标签对应的 config。
4、这个标签解析做了什么?
这些代码都是获取一些属性,然后给 bean 定义里边添加某一个属性对应的值,然后设置某个属性的值。也就是说解析标签的目的就是为了将标签每一个属性都解析出来,保存到自己对应的 xxxconfig 里。
只不过额外需要注意的就是 service 标签它对应的不叫 Config,service 标签对应的叫 service beaning,而 reference 标签对应的是 reference Bean。容器启动标签解析器,解析每一个标签保存到指定的类型对象中。
当 smart 容器启动的时候,会加载配置文件,double 的名称空间处理器就会创建出 double 的很多标签解析器,也就是 double 的 beandefinitionparser 这样标签解析器来解析,然后每一个标签都有自己对应的 config 在这儿解析就行了。
service 标签解析的,是 service Beaing。