00:00
上节课呢,我们看了这个post processor2个方法,在初始化前后可以进行调用,而这个初始化方法呢,就是我们可以通过这三种方式自定义定者实现initial,或者呢用二零都行,然后呢,在初始化前后我们就用post processor可以进行啊拦截,这样的话呢,我们整个应的生命周期从构造对象哎,我们用无参构造器,我们可以编写无参构造器的逻辑,包括呢到初始化,初始化呢我们可以自定义指定来初始化前后我们还能用post processor进行拦截,以及到销毁,我们也能自定义指定这些方法,整个生命周期呢,从头到尾我们都能控制,要说呢,这是我们spring为我们提供的啊控制比生命周期的这些功能,那么呢,我们这节课就来。
01:01
看一下这个b post processor,哎,它里边的这个工作原理,那么呢,我们可以来给我们之前这打一个断点,我们再来深刻理解一下,哎,我们说它是在初始化之前调用,它是在初始化之后调用,什么是之前,什么是之后呢?哎,我们打一个断点,然后我们以得bug的方式。来运行一下debug,好,现在呢,断电来到第一处,哎,我们执行初始化方法,但是呢,我们可以看一下,大致的看一下方法调用站他们都经历了哪些,好,我们先从test瑟零一开始,泰瑟零一开始呢,我们相当于你有一个IC容器,哎那么我们就大致走一下这个过程,这是创建IC容器,那么呢,倒数第二个调用,诶IC容器的构造器,它会调用re方法,哎,这叫刷新容器,那么呢,我们再来点进去,这re方法呢,我们来可以看一下,哎这个re方法有点长,它一直呢是调用的下边的这个叫in initialization哎就叫初始化所有啊剩下的这些单例对象,哎,它在这初始化,初始化呢,我们来进去,哎,我们再进去,哎到方法调用站我们进去,那相当于来到这个初始化方法,这个初始化方法的最后一。
02:25
步是初始化所有的单式利,我们再看它的调用站,哎,它是用get b调用,哎,调用get b,调用里边的do get b,然后呢,调用get s获取单实例,哎,获取单例,但是我们再来看啊,它一直是在这尝试获取,因为这是第一次,那获取不到的话呢,啊,我们容器中它会先调用create并创建对象,好create创建对象,这个调完就会创建出实例,那么呢,我们来看它是怎么创建,点进去,哎,创建对象呢,这有一个叫initialization being,再点进去,哎,这是apply being post process before in,哎,我们可以看一下。
03:12
也就是说呢,我们看它之前我们相当于这个方法里边就是我们啊后置处理器的调用,那这个方法呢,大家注意,哎,前面有一个叫populate be,什么叫populate呢?点进去这个populate呢,其实就是为being的这些属性已经赋值,哎,它在这做各种判断,在这为属性赋值,那么这就是我们先为属性赋好值,然后再调用我们这个也能收那B,哎,点进去。这个引session题我们点进去,它是怎么调用的,诶,我们来注意啊。这1INITIALIZATION being,这有一个,哎,我们往下翻,哎,这有一个叫invo in methods,这叫初始化,哎,执行咱们这些初始化方法,初始化方法就是我们post construct啦,或者自定义初始化啦,或者实行这或者实现引内收那being的这些方法,而在它前边大家注意,这有一个叫apply being post process before,引内收在它的后,这是执行始化,在后边又是apply post process after initial。所以说呢,我们来说两件事,我们在这记录一下。
04:34
这两个执行啊,是在啊,我们把这一段的这一小段的源代码给大家截取过来,诶先是这有一个叫in work method,我们先要执行初始化方法。但是呢,这是执行初始化,但是这个执行初始化的前边我们来看in,它的前边是post process。
05:09
哎,我们来到这儿,哎,它的前面是啊,应用being post process所有的啊应懒任方法,那么它的后边我们来看的后边是应用post process after方法。好,这个呢,就是我们初始化方法执行,前边执行北方in initial哪,我们可以进去看一看,哎,北方in initial拉在怎么执行呢,打开。打开呢,其实就是找到所有的being post processor,诶挨个便利拿到being post processor执行它的营内收啊,再是一旦这个方法返回none以后,整个post processor后边的post processor就不会执行,直接返回,哎,咱们整个方法调出这个for就调出了,所以说呢,它是在这是怎么执行,哎,每一个都一样,便利得到容器中所有的咱们这个being post process。
06:19
然后呢,挨个执行,挨个执行,咱们这个先是执行北方引那首啊方法。但是呢,如果说一旦方法返回呢,一旦返回呢,后边的后置处理器就不会被执行,一旦返回。返回呢,哎,我们看到了那个for循环就直接return,所以说呢,跳出for,跳出for循环,For循环,然后呢,循不会执行后边的并post processor的这些,哎,什么being post,什么post process before in initial有时候就不会执行了,这是我们看码看的,而且呢,我们还看源码看到的一个细节,在这这个初始化的执行,你看这是in initial organizationization being,初始化being初始化being的时候呢,会在先执行being post process,哎初始化之前在执行初始化,在执行初始化之后,但是整个初始化是在。
07:41
在这个之后执行的。说一下哎,整个后边的这么一大个过程。这一大个的过程。这些过程,这些过程呢,他们是在popul b之后执行的。
08:03
这个popul b呢,哎,我们说它就是咱们这个给B进行属性赋值的,那呢,把比的这些属性值哎都附好,比如调用get方法,把比的这些值都封装好了,哎然后呢,才是调用后边的这个初始化方法,再来把这个呢我们复制过来,诶这是值点进去能可以看到,哎这是拿到什么property values,拿到B应的所有属性,在这通过各种办法进行赋值,哎即使在赋值的时候也有一些其他的post processor,我们一会儿可以继续来说它好这个复,哎这是在这复制,复制完后进行初始化,叫应内收啊,在B。把这个打印一下啊,复制完以后进行初始化,初始化呢就是这么三步,先执行啊,备份in内ization,再执行自定义初始化方法,自定义初始化方法再执行after in initialization,这就是我们这个post process的原理。
09:19
那时一定记得它是在赋值之后啊,在初始化并应啊的时候进行执行。
我来说两句