00:00
好,我们经过前面的探究呢,我们发现了LC容器在创建对象的时候会注册这些后置处理器,而在这就把我们这个not aware auto pro create创建出来了,那么这个呢,就是我们这个enable这个注解,它利用这个给容器中啊创建了一个这个B的配置信息,我们在下边呢,在注册后置处理器的时候,把这个B就创建出来,所以呢,前面的步骤啊,以上是咱们这个创建,以上是创建和注册,嗯,应咱们这个Notre接auto的过程。哎,我们是它,而且呢,它我们也都知道这是一个后置处理器,只要这个后置处理器我们已经创建对象放在容器中,那以后呢,其他组件在创建对象的时候,哎,任何组件在创建并应实例都要调用给属性赋值初始化,初始化前后都会有后置处理器的作用,所以呢,它在未来创建其他组件的时候,它就可以拦截到这些创建过程,我们就来看一下它作为后置处理器接下来都做了些什么,还是以前我们把这个debug继续走起来走。
01:26
好来到我们这个set b function方法来,我们以前一步一步从这个TEST0一开始慢慢探究,到这来我们就不说了,然后呢,我们接下来直接放行,放行呢,这来调用set be function,好放行。放心,好,接下来呢,来到了我们这个sruct auto creator,就是我们这个noation,就是这个noation aware这个它调用post process before,诶调了这个方法,那么这个方法呢,大家注意啊,注意这个呢,跟我们这个后置处理器,哎,我们有一个后置处理器叫being post processor,它是啊,Before initialization,啊是这个,而我们的这个方法叫before,这有什么区别呢?来看啊,因为后置处理不一样,我们用的这个后置处理器,哎,我们实现的是一个叫smart,就说它继承的是aware being processor,哎,它也是processor,只不过它是这种类型的,往下看这种processor,它的方法叫。
02:41
哎,注意一下啊,我们把这个写在这儿。好,也就说呢,它是这种类型的后置处理器,它是这种类型的后置处理器,所以说呢,我们这个方法,我们现在来到了它的这个post process before,为什么来到这呢?我们也可以在前面大致的来探究一下,哎,我们可以来看test卡零一,这我们从这开始还是创建LC容器,哎,调用我们这个方法来,然后呢,结合下来,它是在这调用用了finish being啊ization这是来初始化剩下的单式利弊,而我们前面有一个叫诶注册being post process,所以说呢,我们把它。
03:35
来批注上比说呢,我们前面第三大步是注册后置处理器,那么接下来呢,第四步就是哎,有一个叫finish being,完成being方的初始化。完成咱们这个兵分吹初始化工作,所谓的完成初始化工作就是来创建剩下的单实例,为什么叫剩下的呢?哎,因为我们IOC容器中的这些组件,哎,比如一些processor早都已经在注册这个post processor的时候就被创建了,所以呢,会留一些我们没被创建的,他在这儿创建好,他在这呢,调用咱们这个创建啊后边的这个创建方法,那我们来点进去它呢,来调用这个get b获取一个B,获取哪个呢?叫internal event,什么什么什么,这个呢跟我们目前研究没什么关系,那为什么要获取这个B,往前看,这有一个for循环来便利有一个be names,而这个being names是什么呢?就是这个啊,叫being DeFinition name,也就说我们容器中所有的being的定义的名,所以说呢,我们第一。
04:50
第一步应该是这样的,哎,完成B方初始化工作的第一步,先是来便利获取便利编利获取咱们这个啊容器中所有的B,然后呢,依次创建对象,依次创建对象,哎,它是调用这个get be方法,哎来依次调用这个get be方法创建对象,那相当于我们现在就是来到第一个being的创建啊,跟我们啊目前没什么关系的这个宾我们就来可以看一下,通过它来看一下这些宾都咋创的,好get being来调用get being,调用do get being啊我们可以把这个流程大概梳理一下,Get being,它要调用do get being,然后呢,Do get being它又是在这,哎那调用get s获取单实力。
05:50
获取单式利宾就呢,它来调这个,当然调这个呢,它会返回一个share instance啊这一块注释就是在这来创建并实例,其实呢,在这创建之前,我们会发现这提前有声明了,我们往前面看,往前面看这个share instance哎,你看在这其实是第一次获取,也就是说这是怎么获取呢?它是提前先检查单实力的缓存中是不是已经啊人工已经注册了一些单实力的B,也就是说这个B的创建,哎,创建它还是创建B,创建B呢,不是说一下就创建,它是先从啊先从咱们这个缓存中,缓存中获取,所获取当前B应是否被创建当前B如果能获取到,说明当前B是已经被创建,说明B应是之前被创建过的。
06:50
啊,如果能获取到,说明是被创建过的,然后呢,我们来可以看哎在前面这一块的逻辑,哎,这是share instance,如果不等于空在这做一堆操作,返回一个鼻影包装一下,然后就哎直接结束了,这是一个if,否则else才进入我们下边的这个get s来这创建流程,比如说呢,它是能获取就获取啊,不能获取呢才创建,如果能获取的是创建的,然后呢,直接使用啊,否则再创建,再创建,然后呢,我们这个spring就是利用这个机制来保证我们这些单实力宾应只会被创建一次,所有创建的B应,也就说只要创建好的B应都会被缓存起来,是要创建好的B应都会被缓存起来。
07:50
好,这个呢,大家知道一下就行了,我们在这儿还是来调用它的这个并创建好我们就看它的创建好create在这创建啊调用这个啊单势力工厂进行创建好get object创建它调用create b创建好那么现在呢来说一下库艾B应,哎这这个呢才是咱们这个创建B应,前面呢是B应能获取到就不创建,我们来看创建B应有什么说的呢?好,点进去来看啊创建B应呢,我们进入这个方法,好这是创建B应,前面呢拿到要创建的be应的定译信息,比如我们要哎在这儿可以大概看一看,要创建的be应的这个类型是什么,它是否单实例的等等这些be定义信息,哎别这些病的类型解析保存等等等等,好,你这一块不看,主要看这这呢有一个叫reserve,我们也是停在了这。
08:50
行473行叫resolve before installation,哎,创建并应的步骤第一步是这个它叫解析,解析什么呢?这个before installation,这是什么意思呢?哎,我们可以看一下它这个注释,它是说给后置处理器一个机会来返回我们这个代理对象,而替代我们创建在这个目标的并实力,比方说这一块呢,它是想让后置处理器按照注释它是啊,我们希望后置处理器处理器在此能创建,在此能返回一个代理对象。
09:39
啊,然后呢,他希望是这么做的,那如果你看啊这个B,如果后置处理器能返回这个代理对象,他就直接返回,如果不能,这与一个do create b,也就说如果能返回代理对象就使用,如果不能,如果不能就继续继续继续什么呢?继续第二步调用这个do b,下边为什么要说这个第二步呢?我点进去大家就懂了,好,我把这个do create b我们来点进去啊,点进去这个do b,我们其实以前看了很多了,哎,它在这呢,我们来看创建being实例,诶在这创建being实例,创建完了以后下边诶popul就是be应的属性赋值,再是初始化比应,初始化比应的时候还有咱们这个先执行。
10:39
老贝尔接口,再是后置处理器的北,再执行初始化方法,再是后置处理器的after,你看整个流程就是我们在3.6环节里边创建,毕竟实力的流程,就说呢,这才是真正的真正的去创建一个比实例,而和咱们这个3.6的整个流程创建比影实例属性赋值,初始化执行的后置处理器这个流程是一模一样的,和3.6形成一样,好,这个呢,我们就不说了,大家再来回顾回顾,好,那么呢,我们就还是来到这儿,现在呢,我们是停留在这个,希望后置处理器能返回一个代理,如果能返回就用,不能返回才创建,但是呢,我们停在这儿了,我们可以看一下它是怎么做的,点进去,哎,也或者呢,我们点上。
11:39
旁边都是一样,我们进来,哎,进来看他这个方法是怎么做的,他先来看这个毕应是不是啊,毕应式的一个空的,他拿到我们这个毕定义信息,看是不是提前已经被解析过了,什么什么啊,我们就不看了,主要看这这呢有两步,一个叫apply being post processor beforeation,一个叫apply being post process afteration,这有两个这个apply,诶比如说呢,我们这个在,哎那就是在这在这。
12:14
在这,因为这呢是后置处理器啊,我们能介入处理,你看啊,我们没有走后边的这个创建流程,而是呢,先来走这个是不是后置处理器能返回一个对象,我们进这儿了,所以说呢,我们来这儿,我们来这后置处理器,后置处理器先尝试返回对象,怎么返回呢?我们来看一看啊,怎么尝试返回呢?它在这先让B应啊掉这个方法,它呢,先有一个这个方法,然后呢再来看,如果这个being不等于not,又有一个这个方法我们截过来,比如说前面有一个apply being post before,这是干什么的?我们点进去,点进去哎,我们会发现它是拿到所有的后置处理器,如。
13:14
不过我们后置处理器是这个being post process,它呢就在这给我们调用这个的post啊,Process before installation方法,也就说在这个里边,它是判断拿到所有后置处理器,如果是。这个后置处理器。他这判断如果是这个,如果是它就执行就执行,执行什么呢?执行这个后置处理器的,执行我们这个后置处理器的,我们来点进去它的post process方法,那我们我为什么要说呢?来看啊,我们的这个后置理,我们有一个notation aware这个后置处理器,你看你之前还说了,它就是这个后置处理器,它的这个后置处理器的方法,诶哎,这个后置处理器呢,定义的是啊之前,而不是我们以前学的后置处理器的啊,Initialization之前,所以说这个后置处理器跟后置处理器不一样,也就说在这一块呢,我们就说了一下不一样的后置处理器,比如说being post process。
14:43
Pro是在being对象创建完成初始化前后调用的,而我们呢,在这里边看到了,它在这有一个判断,是不是我们这个ation aware这个being post process,它是什么呢?它是你看它是什么,我们下面是不是才是创建实例,而前边是希望后置处理器先能返回一个对象,哎,它是在创建逼应实例实例之前,哎先尝试用后置处理器,用后置处理器返回对象,所以后置处理器跟后置处理器不一样,什么时候调用大家得稍微清楚一下,哎,这就是这两个后置处理器,特别是它也就是我们这个啊,我们。
15:43
注入的这个notation,这个createre,哎,它是这个后置处理器,它会在任何并创建之前都会先呢尝试拦截,相当于我们得到一个这个结论。创建B,这个会在任何B创建之前先尝试返回,返回being的实例,好,那么呢,所以就来到了,啊,我们这它要应用apply being post process before啊来到了我们这个,哎,我们现在来判断这个后置处理器,是不是呢,我们这个notation轮到我们这个后置处理器了,正好呢,它就是这个接口,哎,调用它的这个before方法,所以说呢,我们也分析了一下它的这个方法是怎么来到这儿的,怎么来到这儿的,就是说。
16:47
就是说呢,我们的最终分析就是。A notation aware,这个creator在所有being创建之前会有一个拦截,因为它是这个后置处理器,所以说呢,会调用会调用啊,我们这个啊,Auto,你看的这个方法就会,那么呢,我们下一节课就来看这个方法做了什么。
我来说两句