00:00
啊。我们把这个锻炼呢打在这儿,然后我们来逮八个运行走,右键逮八个按子走。好,进来。进来以后呢,我们来看它要获取circle session方向,我们就进入我们自己写的这个获取方法,我们看他做了什么工作。首先呢,拿到我们这个文件的流啊,这个流我们就不仔细看了啊。拿到文件流,接下来他要new一个circle session,风吹build,调用这个build的build方法。我们把这个流程图呢,就一点一点画出来。我们用这个入工具来画一个时序图。我们来创建一个时序图。这个时序图呢,就是我们来讲MY,咱们这个circle session。翻的。初始化的。
01:00
看他创建的时候都做了些什么。行,我们创建的时候呢,第一步,哎,有一个circle session function builder,哎,我们用了一个它。也就说呢,我们创建了一个CI function builder对象。创建。创建咱们这个circle session对象。把这个对象拿到以后。我们来看第二步。第二步呢,我们来好,我们来看它调用了一个build的方法,嗯。它要调用一个build的方法。这个build方法呢,传入咱们这个文件流input。我们看他build以后做了些什么,好,我们就进入build的这个内部流程。这个new对象我们就不看了,这个build我们来打开实现。
02:03
我呢,哎,它在这个build里边又调用我们这个自己的这个build,我呢就在这儿打个断点。直接放行到我们这一处打的断点,我们step into进入这个build的细节,也就是说呢,它最终不管任何build的方法,它就掉了,自己写了三个参数的build。好,Step into,进入这个。然后呢,它第一步就先创建了一个叫插麦con build,哎,我们翻译过来呢,叫插麦配置的咱们这个建造器。而人家就给这个命名叫passer,而这个pass呢,翻译过来就叫解析器,诶。这个呢,就是根据我们当前的这个文件,创建一个呢,能解析这个文件的。解析器我们就不看了。这passer呢?哎,我们创建出这个pale叫conflict build。它呢,先创建一个叫插面。
03:09
Build这个呢,咱们第一步先创建解析器,哎,创建。就是我们这个创建解析器。创建我们这个pass。而这个puzzle呢,就是我们这个build。我们来看这个解析器做了些什么。然后它调用Bill的方法啊,puzzle.pass我们就来看puzzle.pass做什么。好,Step头。热点pass好。它呢,最终哎,会调用我们这个pass方法,Configuration con confi build pass方法。来,进来。进来以后呢,它会调一个方法叫啊pass configuration解析我们配置,然后呢,它调用这个passer,而这个passer啊,我们刚才没看,现在呢,看一下这个pale呢,刚才创建出来是一个叉pass pass。
04:08
这一块呢,它是做一个基于do for阶的这个叉pass解析的。比如说呢,他拿到一个这个解析器,我们把一些呢,对象陌生的对象呢,我们也放。首先呢,这个叉pass pass它是一个解析器,帮我们解析插文件,然后调用解析器in value的node计算configuration节点。这个configuration节点呢,就是我们全局配置文件中。那他。来,我们看啊,全局配置文件最大的标签就是configuration。而至于叉叉叉me尔的这个叉pass解析怎么做啊,我们就不在这深入源码看了啊,有兴趣的同学哎,大家也可以去学习一下,那我们来直接进入它这个解析啊,Pass configuration,我们来看他干了些什么。
05:03
而这个方法的实现呢,就在下边。他先拿到configuration的这个更节点,拿到节点以后呢,就进入我们这个解析流程,我们在图。获取节点的方法,我们就直接返回进来。好,拿到我们这个configuration根节点,然后呢,我们来看啊,它这一块还是调用根节点in value的node,诶既拿到根节点的每一个节点,因为我们configuration里边能写settings properties typees等等,你看啊,它这就是挨个的解析每一个节点值。这个每个节点的值呢,我们就假设以这个setting。对。Setting呢,就是拿到我们这个全局配置,把全局配置做成一个properties,然后呢,在这里边我们来看。他要settings element,哎,咱们这个setting元素它的解析我们进去。
06:00
它在这一块呢,相当于我们来看啊。从体中获取到我们每一个全局能设置的这个项目,比如我们这个二级缓存是否启用懒加载,以及我们这个延迟加载,把每一个设置项,包括我们这个驼峰命名法也在这儿。每一个设置项呢,拿过来,如哎这块出和false,就是我们没设置的时候默认值。计算到我们全局配置的每一项内容,然后把它调用configuration set,哎,Set进去就是说呢,相当于是解析啊我们每一个内容,并保存在configuration对象中。所以说它在这解析会产生一个。对象。也就是说呢,它解析每一个标签,哎,他在这的做法就是解析。每一个。标签。标签。
07:00
保存在。保存在。把信把详细信息。保存在咱们这个configuration中。这就是它,哎,解析每一个标签的作用,把这些信息呢都保存在conration中,而解析流程我们就OK。好,我们让这个setting解析完,接下来呢,还有一个叫map element这一块呢,就是解析标签啊。因为这个呢也挺重要的,我们大概的可以看一下。好,Step into拿到这个map节点我们就不看了啊,进入来看,拿到map节点以后呢,它判断诶,如果你是写的package标签,而我们现在呢,我们来看啊,我们是以member标签引入的,没写包扫描这些package批量引入。所以说呢,这个不进就进入这个。他拿到你当前标签的resource属性,而我们引入内陆镜像的资源,我们用的就是resource。
08:04
他拿到这个resource的值,诶我们要引入一个叫employee member,查没有好,如果你写了URL属性,那引入URL属性的值,如果呢,你是用啊这个基于注解的class,那么拿到class的值。而我们呢,是引用内路镜像的,所以说拿到resource这个判断,Resource不等于空,其他哎,我们没用这种方式等于空。还是第一步拿到这个流,诶拿到我们当前插麦啊,咱们circleq映射文件的流,接下来他又用了一个mappa,哎,他用了一个map的这个解析器,然后这一块呢,啊,我们大家知道MY,哎解析什么文件都是用一个解析器就行了。然后我们就来看他怎么解析的就成。这个呢是叉ma map pass专门来解析map文件的,好,它里边呢,这个pass还是我们这个叉pass pass,哎,用叉pass做解析。
09:06
我们点看它的pass方法怎么解析map文件。点进去好。这一块呢,我们来进入,哎,它有一个叫configuration,先拿到member标签啊,然后呢啊,咱们调用这个方法configuration element啊我们配置元素。进去,我们把节点的获取,我们返回过来,再进去。这个的细节呢,我们可以大概看一下,你看啊,这就是拿到我们标签诶。拿到我们这些map配置啊。长的。拿到我们叉麦尔的每一个,哎。纸你看啊,我们这个member拿到他的namepa,诶就在这。来,我们再来看还有拿到,诶拿到他的namepa,诶就在这儿,我们拿到了,以及拿到他的其他所有值,把namepa设置到当前的这个name space里边。
10:02
如果你写了catch标签,拿到catch或者catch reference再来做啊,咱们这个缓存解析,而我们没写缓存这一块呢,我们放过,哎,有兴趣的同学也可以看缓存解析。接下来呢,哎,如果你写了perter map,把perter map拿到,写了result map,我们自定义结果集啊,把自定义结果集拿到。啊,如果你写了抽取可重用的circle了,把可重用的circle来做解析,没这些解析工作呢?啊,大家可以往过来看。我们就以这个为例。以我们解析select insert增删改查标签为例,我们进去来看它如何解析增删改查标签的。Step into进来把增删改查所有标签拿到,哎,会拿到一个增删改查所有标签的list。好,我们返回。然后呢,我们来看它怎么解析这个list,哎,这个方法就在下边,我们带音谱。
11:03
他呢,先从configuration中拿到咱们当前数据库的get ID,而我们啊。我们来看啊,没有配置这些东西就没有好,而我们现在大家应该知道的是,这个configuration对象里边保存了我们所有的信息,却包括全局配置的每一个信息。以及之前我们已经解析过的map元素的每一个信息。我们接下来来看啊,调用这个解析方法。进去好,我们来看怎么解析。拿到我们这个list。我们呢,就有一个哎,查询标签,这个标签的名是查询它标签题里边,你看井号打括号ID这些都是我们标签体里面的值。好,我们来看它怎么解析。走进去,他拿到这个,又是来解析我们这个circle,哎,这个增删改查标签的,他又拿到呢,能解析增删改查标签的这个pass,它叫statement PAR。
12:05
然后呢,解析我们啊,SQL语句的这个牌子。然后呢,利用这个牌子啊。来解析我们这个statement节点。哎,我们所说的statement节点,就是我们这些增删改查节点。好,我们来看它怎么解析点进去。你看啊,他拿到相当于是拿到每一个增删改查的标签的ID值,你看啊,包括你标了database ID拿到ID。包括看大家看下边哎。标签能写的所有属性,他全部拿到。所以说呢,比如result type我们写过了,哎。他就拿到这个值,相当于是把我们当前这个增删改查标签的所有详细信息全部拿出来。拿出来以后呢,我们往下看。把这些详细信息你看啊,拿出来的这些东西调了一个方法啊,构造出来,哎,叫and map statement。
13:03
添加一个map的。所以说呢,我们这一块呢,Configuration我们再来说一下。好,我们还是刚才已解析。解析咱们这个map为例的解析map。插面的时候。Map叉,它解析map呢,它就是哎,把咱们这个map叉麦。我们来说一下这个流程。来把member。点差中的每一个元素。咱们这个我们是以增删改查标签为例的。的每一个元素。元素。信息解析。出来并保存。并保存,它呢都是保存在configuration中的,我们刚才以set为例的时候,我们看到了,哎,咱们这个呢,嗯。好多的都保存在,并保存在。
14:05
接下来呢,我们是以在以map中的这个什么,哎。解析增删改查标签,接下来呢,它就是将增删改查标签。改查标签。的啊,每一个标签,每一个属性都解析。解析出来呢,他。调用了一个方法叫and map statement,大家进去可以看走。还没到这儿。好,我们直接呢,给这按到这儿打一个断点,好,然后呢,我们来进去看这个方法。这个方法呢,哎,它就相当于是,哎这个and map STEM,这是这个方法。这个方法呢,最终返回一个map的对象。解析出来相当于封装成一个map的。
15:01
封装。封装成一。Map statement好,至此,大家需要知道的一点就是,一个map的statement就代表一个增删改查标签的详细信息。代表。选一个。增删。改查标签。标签。详细信息。比如说呢,增删改查标签的所有详情保存在了这个map步的德们中。我们接下来继续来看。对map的statement创建,我们就让它返回。他呢,把这个map的statement拿到以后,你看啊,把这个我们解析到的这个statement好,就调用Bill的方法,把我们这个map的statement构建出来。而这个map的statement里边就包含了当前标签的所有详情。我把这个整个截图。
16:05
比如呢啊,这是一个map的statement,代表一个增删改查标签,当前标签这个的ID值以及当前标签,哎,它是哪个插文件下以及当前标签,我们来看一下它的这个SQ语句,它在哪里呢?啊,Statement对象好。他把circle语句呢也封装过来,我们看跟circle有关的,哎,这有一个circle source。呃,原来的这个东西好,SQL语句也都在这儿。所以说呢,哎,这个map。它就是代表了我们。这个增删感上表签。里边有我们要用的好多东西,包括我们的SQL语句。它呢,放在了一个叫。对象中。包括呢,我们这个,哎,Result type。以及我们这个ID。以及如果我们写data ID了等等,所有值,所有都在这儿好。
17:03
把这个图。一个map的。代表一个。增删改查标签。一个慢的。代表。增删。标签。的详情。详细信息好,然后呢,把每一个增删改查的详细信息,它最终做完了以后,还是添加到全局配置中。相当于我们整个初始化工作都是给这个configuration中中保存东西,我们来看啊。解析完,让他解析完。招都解析完解。这这个呢,这一块的pass是我们来解析我们这个map文件的,好,我们让这个map文件,其他我们就不看了,让他解析吧。Map文件解析完。
18:02
这个元素我们就解析完了走。解析完以后呢,我们整个pass configuration就完成了,它完成以后会返回一个configuration对象。而这个configuration里边保存了我们所有信息。这个所有信息真的是非常多。我们来看一下,哎,它里边呢,保存了我们全局配置的每一个值,哎,包括呢,我们这一块还有一个,哎,我们这些跟啊咱们这个缓存有关的,跟咱们这个延迟加载有关的,以及我们啊data ID,包括这还有一个什么type。什么这个我们再来往下看,哎。JD bc type for,我们以前也设置过,哎,然后呢,啊。有好多好多的内容。这就是我们这个全局配置生成的。这个configuration就保存了。
19:00
Configuration对象。保存了。保存了所有配置文件的详情。详细信息,哎,包括全局配置文件和circle映射文件。里边的东西都在这里边保存了。包括我们这个configuration,我们来看啊。我们circle映射整个注册完以后呢,它就会有一个,我们来看看这一块有一个。叫map的statements。我们都知道map的statement,诶,你看啊,每一个方法对应的一个map statement对象,诶。哎,它还有这些属性。每一个方法对应的这个map statement对象,我们都知道这个map statement对象呢,哎,就是代表一个增删改查标签,所以说呢,最终每一个。
20:02
啊,咱们这个方法的ID。标签的ID,它会把它标签ID来注册进来,好在这儿还有一个叫map registry,这里边呢还保存了knowing member。这个know member呢,保存了每一个接口对应的一个。先把这个我们来看。这个图我们截好。就好。那么这一块呢,有两个重要信息,一个map的statement。全局配置里边呢,哎。保存了。每一个。ID啊,我们这个方标签的ID对应它当前标封装了标签信息的map statement的对象。我们把这些重要的这个。封装的数据截图我们都放在这儿,然后说呢,这是全局配置中。全局。
21:01
咱们这个configuration对象中的一个重要配置。的重要属性。好,包括呢,我们来看,还有另外一个,哎,我们全局配置里边呢。每一个接口会对应一个我们来看。每一个接口呢,在这里边儿。往上翻有一个GRY。这个regry里边呢,有一个no member no member里边每一个接口,你看啊,Interface,我们当前employee member会对应一个member pro。这个proxy factory又是啥呀?翻译过来是不是就叫member proxy的工程啊?我们都知道接口,我们最终拿到的是member proxy对象。而每一个接口呢,对应的是这个它的工厂,所以说呢,肯定就是最后这个工厂来创建member。好,我们把这个呢也拿到。
22:02
又一个重要的属性。那么呢,相当于我们整个流程走完,哎。它呢,这个configuration对象就构建出来了。也就是说呢,最终把代表全局配置的configuration给我。把它给我们返回。返回。封装了。所有配置信息的。也就是说呢,这一块大家,哎需要。需要了解好,把这个一封装以后呢,哎,最终返回我们这个configuration,所以说这个pass方法,它最终会返回一个configuration。这个consideration的返回呢,它很。
23:03
我们来看,比如说呢,最终这个啊,Pass解析完了以后,会返回一个configuration。返回configuration。然后呢,我们把这个configuration,哎,这个build呢,其实呢,里边传的最终一个configuration,哎。把他build过来。但是再来build的时候呢,哎,我们发现这个build。他在这儿,再来build。把这个build。里边传入configuration。哎,我们刚才构建的configuration。而这个configuration被BUILD1传入以后,最终我们发现它是干嘛?这个build方法就是把全局配置传过来,New了一个default circle。
24:00
所以说呢,这个build最终它会给你返回一个default CIRC factor。也就是说呢。来,注意。T。也就是说呢,他在这build的时候。我们来把这个图呢重新画一下。返回configuration,然后呢,我们这个调用build。把这个configuration。传进来。传进来,传进来以后呢,最终给我们返回的是一个default circle对象。我说呢,在这儿拗了一个。又一个对。把它扭出来,拗出来以后呢,交给我们,哎,然后呢,我们来看啊。
25:03
相当于我们最终收到的对象就是这个。我们叫default。返回。返回创建的。Default。Circle。而这个default CIRC里边包含了。包括。保存。全局配置。配置信息的,咱们这个抗。好。我们把这个运行流程图呢截给大家,在这个流程图中。我们来总结一下。这是他的第一步。啊,这是它的第一步。Factory的初始化。创建根据配置文件。
26:02
创建。Circle。Session。而这个ciation factor呢?最终返回的是一个default factor。因为我们知道这个circle session,它就是一个接口而已。我们会返回你这个default。好让他返回。然后刘玉关最终返回,好,返回我们这个方法调完以后,它就会返回一个default CIRC factor。它里边呢,包含了我们这个全局配置。把这个对象截图。然后说呢,哎,这一块大家需要注意一下,哎,我呢把这个跟他关联的。我们就放在这儿。也就说呢,创建circle sessionation factory,最终呢,你会得到一个defaultrc factor。
27:00
这个对象里边呢,保存了configuration,而configuration我们在这一块呢,大家需要知道configuration代表对象,代表了。代表。所有。配置文件的详情。封装了。详细信息。包括这里边儿封装的时候呢,两个比较重要的,还有这个map的statement这些东西。这些东西大家来看。啊,所以说呢,我们这一块在整个初始化总结起来就是一句话。把。把。所有配置文件的信息。配置文件的信息保存、解析并。保存在。Configuration。对象中。返回咱们这个。
28:01
我们叫default。Session对象。也就是说呢,这是我们这个总结。返回。返回包含了。Configuration。Deft对象好。这是我们,哎运行流程第一步,咱们factor的初始化。
我来说两句