00:00
好,前面呢,我们学习了一下spring的l cup以及生命式事物啊,他们的注解驱动开发,而且呢,我们还从源码的角度分析了一下他们里边的工作原理,那么我们接下来学习一下spring里边一些其他的这些扩展原理,我们希望通过这些啊原理的学习,大家对spring里边的运行机制啊,包括内部的工作原理能有一个非常深刻的认识,这样的话对于大家来学习哎,其他spring里边的其他框架啊,会有非常好的帮助。好,我来创建一个新的咱们这个包,我们在这里边来说我们这个扩展原理,我来写一个配置类。Ext con,好,我们来说它是一个configuration配置类,我们在这里边呢,来说我们剩下的扩展原理,扩展原理呢,我们要说这么多,我们先来说这个being factor post processor,那么说这个呢,与它大概名字相同的有一个叫being post process,这个是我们以前说过的,什么叫post process呢?我们说它是咱们这being后置处理器,哎,它是在B创建对象,创建对象初始化前后来进行拦截工作的,这是我们being post processor,但是呢,接下来还有一个叫being factor post processor,哎,这不是being的后置处理器了,它是being factor。
01:48
的后置处理器,哎,Being function function到后置处理器,那他什么时候工作呢?来我们可以点一个它,我们看一下这里边啊,它说它的作用呢,就是我们可以修改咱们这个LC容器里边的这个冰防水冰番,就是创建B的这些工厂,After after,什么after,我们这个工厂在standard的。
02:16
In initialization在标准初始化完成之后,就说呢,它的调用时机是在being factor标准初始化,标准初始化之后调用,那么什么叫标准初始化呢?我们可以看一下它详细名描述,也就是说这个时候呢,所有的being定义已经被加载了,但是呢,还没有being no啊,Will be,咱们in也说我们还没有be被咱们这个初始化,呃,它的实际就是所有的being音配置,所有的being定义已经保存加载,已经保存加载到咱们这b factor中,但是呢,这个factor还没帮我们创建任何的B,但是B的实例还未创建。
03:16
好,也就是说它是这个时期,我们来写一个试一试,我来写一个我们的being方式,好,My being factory post processor post processor,好,那么呢,我们要写这个B工厂的后置处理器,我们来实现我们刚才说的being factory post processor接口,添加一个,哎,我们来添加未现的方法,好,这呢就只有一个未实现的方法叫post process being factor,那么呢,它的这个工作就是在这个时候,我们being的D已经被加载,但是还没创建对象的时候工作,那我们来测试一下。
04:06
好,那么这个being factor呢,如果他工作了,我们来打印上一个my being factor post process,它执行了咱们这个post process being factor,但是这个时候呢,我们所有的being还没创建,而我们可以看一下啊,用它给我们传过来的这个being being工程我们能拿到,比如get being啊,DeFinition,哎,这有一个DeFinition count我能拿到,有几个being定义了,我们还能拿到每一个的定义的名字,Get DeFinition,我们假设呢,就拿这两个信息,我们来给它打印一下,当前啊,咱们这个冰三水中有几个,咱们这个B,把这个数字来答一下,就是呢,我们这个count包括呢,这些B是什么,我们也可以来打印出来,我们用这。
05:06
The。工具点把我们这个name转过来,好,我们来写一个测试,测试我们来写在这儿,我们来CTRLC复制一个新的测试来测试扩展原理。好,当然了,这个being我们要让spring能知道啊,能用起来,它一定得加在容器中,我们可以用component,要用它,那我们就来写包扫描。component,好,我们让它来扫描我们这个EST包下的所有组件,好,我们来写完我们的这个测试。删掉。那我们现在呢,New就来用咱们这个ext,我们来加载ext来加载这个配置文件,好,我们呢,现在来进行测试,看这个冰方有没有工作,工作的时候呢,在哪里工作,比如我们再给这里边来加上几个组件,把我们以前的这几个组件啊,我们来加几个,比如有一个blue。
06:22
录的,我们给容器中加一个blue对象。扭一个blue。好,我们把它呢加在容器中,这时呢,这些普通的组件在创建对象,来我们点过去,如果组件创建对象,我们这个会有打印比说呢,我们看我们这个being factor process是在组件的这些构造器创建啊对象之后还是之前好我来在这里把我们的测试运行起来。
07:01
走。好,我们这个测试我们看到现在呢,我们这个B影还没创建,下边打印的是创建的用的构造器,而上边呢,当前已经有九个B能拿得到,包括呢,有咱们这个隐藏到什么什么,哎我们注册在容器中的这些组件,诶blue在这儿也已经有了,只是呢还没创建对象,这就是呢,我们这个时机,哎它在这个时候进行调用的,包括我们用debug的方式,我们来看一下它真正的时机,来在这打一个断点。我们来以debug的方式来运行我们这个post being post process。好对吧,我们运行起来,运行起来呢,我们来看到,诶它现在呢,停在我们这个post process being factor停到这儿了,而之前我们来看之前的整个流程,好test,我们现在要new LC容器创建,容器还是一样,我们之前容器创建呢,要进行刷新,好刷新呢大家注意在这一块。
08:07
在这一块。在这一块这一块呢,有一个叫in work being factory post processs,在这一块的时候呢,执行到我们的这个B方的后置处理器这些方法,所以说呢,我们来把咱们这个时机来写一下,第一个时机是咱们这IOC容器创建对象,但是创建对象的时候呢,它其中有一部有一部叫叫invoke being factory post processs执行我们这个being factory执行。Being factory post process。哎,执行这些,那他是怎么执行的呢?我们也可以进来看一看,来他在这呢,调这个方法来执行,好它上一层又调这个方法,但是呢,要执行哪些post process,诶我们来看这还有一个no order的啊,Being factor process就在这都说呢这一块的这个它是从这拿到的,诶它是从being工厂中获取每一个post processor的名字,那获取哪些呢?来获取being factory post process让那从工厂中如何找到,如何找到所有的咱们这个being factory post processor,并来执行他们的方法呢?并执行他们的方法,其实哎跟我们之前看到的b post processor大致一样,包括他在这也有这些优先级排序,你看first。
09:53
来先来执行实现了这个优先级order接口的,接下来呢,执行,呃,实现咱们这个order接口的,你看下边呢,这是执行实现order接口的这一块呢,是执行我们实现优先级接口的,但我们的普通的这个在这儿执行,在这儿执行呢,它就是拿到所有的being post processor点过来,哎,我们being factor post processor把这个便利拿过来,回掉每一个的方法,但是这些毕应它是怎么找到的呢?哎,我们来往上翻。
10:28
No ordered no ordered,它有一个叫no ordered being post processor,咱们这个names在前面,在这,所以说呢,它是在这一块找到的,怎么找啊,他来拿到所有的being post process的名,而这个名呢,是从这获取的,他从being工厂中就来找being factor post processor这些组件,把这些组件拿来挨个来看啊,我们哪个是没有排序的,哪个是排了序的,哎,他在这儿呢,进行便利,哎,如果是有优先级排序接口的,它放进这儿,哎,有咱们这个排序接口的,它放在这儿,普通的它放在这儿,接下来呢,每一个来in work in work进行执行,哎,所以说我们只需要把它加在容器中,它就是呢,直接在容器中,直接在B翻出,哎,B工厂中,B工厂也就是我们的后来L。
11:28
容器,找到所有类型是being post process的组件。并执行他们的方法,那为什么它是在并应对象创建之后呢?哎,因为如果我们大家还有回忆的话,我们之前讲a op,哎,或者来讲其他的时候,我们B应对象的创建还在下边来,在这非内是并应专垂应那时候了,在是哎,它来初始化所有剩下的单式力并应,在这才初始化单式力并应的,而在最上边就已经执行了be factor post process了,所以说这是在being初始化的前边,在初始化创建其他组件前边执行,这就是我们从圆码的位置看到了它的整个执行顺序以及原理。
我来说两句