00:00
好,前面呢,我们介绍了一下double的框架设计图,接下来呢,我们就来说一下double在启动过程中如何来解析它的配置文件,我们这个配置文件呢,我们将所有的配置写在double的配置文件中,特别是呢,我们要远程暴露服务,包括联想注册中心等等,那这个配置文件是如何解析的?我们呢,首先来说上一个原理,因为这个配置文件呢,是一个spring的配置文件,我们启动呢,也是以spring的方式在这来加载启动spring来解析配置文件中每一个标签都会有一个总接口,叫DeFinition pass啊being定义的解析器,这个解析器里边呢,我们来打开它的继承数来看,其中呢就有一个叫double being DeFinition pazz叫double的这个标签解析器,这个呢有一个pass方法,就是在这来解析标签,那我们IC容器一启动,此轮容器一启动,我们就要来解析挨个的标签,好,我们在这来debug一下,我们给那个pass方法打了一个断点走。
01:11
好,我们看到呢,确实过来了,而且是挨个标签来解析,我们来看第一个元素是double application,好,我们来放行,第二个呢是叫double registry来放行,包括呢,第三个这是叫double protocol,哎,我们这一块每一个标签都会在这来解析,那这些标签解析都做了什么呢?我们可以往下翻,诶它呢,其实获取到标签的ID,包括标签的名字,如果没有还用一些默认名,这都是一些生成规则,我们就直接给他放行。放行完了以后呢,大家注意它呢,这会有一个判断,如果说这个being的类型等于port config,哎,我们这个协议的配置就怎么办,如果说这个类型等于service being怎么办,如果说这个类型等于provider conig怎么办,如果这个类型等于consumer con怎么办?等等等等,那它是如何判断出这个类型的呢?那们看一下我们当前这一次传进来的类型是什么?哎,我发现呢,我们传的是portoc con,那再来下一次,下一次呢,是我们这个service being,这个service being呢,其实是轮到解析service标签了,它传service b,那我们下一个,嗯,就应该是provider走下一个。
02:29
来,我们看到呢,这是一个muscle的config,哦,Man是因为我们这个service标签里边有man的配置,好,那我们再来看下一个,下一个呢,我们来发现这是provide con,哎,没问题,我们这个service配完,那就是provide的配置,那我们再来下一个,那就有service,还有monitor,哎,我们来看一下下一个。好,又是一个service,我们再来下一个。哎,又是一个muscle的,哎,Service里边有man的,再下一个,接下来呢,就是我们这个monitor con,也就是说呢,每一个标签可能会对应一个这个B的class,为什么会这样呢?由于我们这个东西是来做be的标签解析器的,所以说呢,我给它构造器打一个断点,我们看它这个构造器是怎么创建出来的,好把这个停掉,来重新启动。
03:24
来到这个构造器,构造器的前一步,诶,我们发现啊,其实有一个叫double的name space handler double的名称空间处理器,这个处理器呢,在这注册了非常多的标签解析器,如果application标签解析,那我们就用这个being DeFinition pass,然后呢,用application config,相当于封装这个标签里边的内容,也就说我们传过来的这个class啊,其实就是在构造初始啊,人家硬性规定的,哎,每一个标签就有每一个标签对应的什么config,而我们真正的解析,我们来可以放行一下。
04:03
来放行,好放行,我们先把这几个标签的解析器,我们来给它注过来。放行,好,那这个标签解析做了什么呢?其实我们随便往下一翻看这些代码,哎,它呢都是获取一些属性,然后给这个并定义里边添加某一个属性对应的值,包括都是这样,哎,获取某个属性的值,然后呢设置某个属性的值说也就是说哎,这个解析标签的目的就是为了将我们标签每一个属性都解析出来,保存到自己对应的这个叉叉叉config里边,只不过额外需要注意的就是我们这个service标签呢,它对应的这个不叫什么,什么config service标签呢,对应的叫service being,而我们reference标签对应的是reference being,也就说我们第一步就做完了,容器启动标签解析器,解析每一个标签,保存到指定的这个类型对象中,我呢在这儿也画了一个图,当我们spring容器启动的时候呢,我们会加载。
05:11
配置文件,那么double的这个名称空间处理器就会创建出double的很多标签解析器,Double,也就是double的这个B,音称pass这个标签解析器啊,来挨个解析我们double的每一个标签,每一个标签呢,都有自己对应的什么什么conf,什么什么conf在这解析就行了,而我们service标签呢,解析的它是service b,而我们这个service标签它的解析呢,牵扯到我们这个服务暴露的过程,哎,我们如何将服务注册到注册中心,让别人来引用,那这个过程呢,我们下一节课继续讨论好。
我来说两句