00:00
好,前面呢,我们说了一下嵌入式select容器的自动配置原理,主要呢,就是spring boot给我们容器中放了一个嵌入式的select容器工厂组件,只要这个组件呢创建对象,那么就会触发我们这个嵌入式的容器定制器的后置处理器,这个后置处理器呢,哎,只要它创建对象,后置处理器就会拿到所有的定制器,哎帮我们来定制我们嵌入式容器的一些特性,而我们整个的前提呢,都是需要嵌入式容器工程先创建出对象,它才能进动后置处理器,才能调用我们这些server properties,哎,它也是一个定制器来帮我们定制这些数据,所以呢,我们就来研究这个嵌入式容器工厂什么时候创建对象,而他创建对象呢,不是目的,目的是呢,它在创建对象的时候会给我们,诶我们来看前边。
01:01
它呢会给我们调用方法来获取到嵌入式的容器,所以呢,我们就来看我们这个嵌入式的咱们这个容器工厂什么时候创建对象,它什么时候获取嵌入式的容器,只要容器一获取,我们汤开的就启动起来了,我们接下来就在这来研究S容器的启动原理,什么时候创建咱们这个嵌入式的容器工程。嵌入式的server容器。工厂和。好,好,什么时候获取嵌入式的容器并启动开。并启动开好,我们接下来呢就来研究它,当我们还是来到我们这个嵌入式的solid容器,自动配置,我们叫ED,我们来写一个CN来搜索Mo。
02:06
我们嵌入的咱们这个容器自动配置,在这个自动配置呢,我们主要给我们容器中放了一个嵌入式的他姆CA的容器工厂,这个容器工厂是什么时候获取对象的,我放在这,这是第一步,第二步呢,我们再来看这个容器工厂是什么时候帮我们来获取嵌入式容器的,这是第二步。那好,我们就分别来看这两步为debug的模式来运行。我们服务器呢,现在正在启动,好,先来到我们要获取嵌入式的so容器工程,什么时候获取的呢?我们可以来看一下,诶我们从整个应用的主方法开始们所boot应用先来run启动,启动呢它调用这个run方法,Run方法呢分为两步,第一步呢是创建一个spring应用,第二步呢是run,而spring应用呢,已经创建完了,它第二步呢调用这个run,第二步调用run的时候呢,其中有一步叫re contest re conest的意思呢就叫刷新容器,也就是刷新我们的IC容器,就是创建我们IOC容器对象,用了IOC容器对象里边的组件初始化,而这个刷新容器我们可以看到它要刷新的是这个容器,而这个容器呢,是在这创建出来的,它叫创建LC容器,创建IOC容器呢,我们点进来,我们其实还可以看到,在这呢会有判断,如果当前。
03:39
就web环境,它就会创建一个web的IOC容器,我点进来,诶web的IOC容器叫not coned weest,如果当前呢,不是web环境,它就创建一个默认的咱们这个容器,默认的容器呢,就叫con application contest所呢到底要创建哪个版本的IOC容器,它也在这有判断,然后呢,主要是在refresh con,我们在刷新IOC容器的时候,调用IOC容器的刷新方法,点进来,这是IOC容器的刷新方法,我们现在IOC容器用的就是这个,哎,嵌入式的,咱们这基于注解嵌入式的外B应用的LC容器,它要在刷新容器,我们点进来,容器的刷新好super,我再点进来,整个过程呢,哎,IOC容器的刷新就是这个re方法有这么多,包括我们在s spring注解版里边已经详细解释了每一个方法的作用。如果不知道。
04:39
同学可以进去来看,它主要来到unre给子容器留的这个方法这一步,这一步呢,它调用创建嵌入式的容器。然后呢,诶,我们看到这一步,它就来获取嵌入式的容器了,所以呢,主要步骤我们就来总结一下。
05:00
或许嵌入式的。嵌入是的,Solid容器工厂,哎,这是我们的第一步,它是怎么获取的呢?哎,它就是第一步,Wbot应用启动运行run方法,BOO应用启动运行run方法。那么其他的细节呢,我就先屏蔽掉它,在启动运行run方法的时候,主要有一步呢,来往下看,再往下看,这一步呢,需要就叫新IOC容器,这呢新IOC容器所谓的刷新IOC容器,就是创建IOC容器对象。并初始化武器。并初始化容器,而这个初始化容器呢,哎,它就是它的整个过程里边呢,就包括要创建我们容器里边加入的每一个B,包括呢,咱们这个创建容器中的每一个讲这是它第二它要刷新LC容器了,包括呢要刷新什么容器,还他之前还做了判断,如果是web应用,如果是web应用。
06:24
创建的是这个IOC容器,我们可以在这儿看一下来,他要刷新这个容器,而这个容器的前边是创建我们这个IOC容器,我点进来创建呢,它在这来判断是不是web环境,哎,这有一个web environment,哎,这是不是它这默认是true,好,我们就把它放下来。往下来我们来到我们的这个方法,如果是外部环境,它来创建这个。那如果是外部应用,它就创建这个LC容器。否则。否则如果不是一个web应用呢,它就创建默认的LC容器,来我们来看web LC容器跟默认的LC容器叫conflict,都是基于柱子注解版的C容器,好在我们这个web IC容器它创建的时候呢,它调用rere rere呢,把我们这个web的LC容器传进来刷新,这就是第二步刷新容器。
07:25
刷新。刚才创建好的IOC容器,这是咱们第三步,第四步主要是在容器刷新的时候,哎,我们来还是点进来,我们当前呢,现在是web的IOC容器,Web IOC容器在刷新的时候,它先调用负容器的刷新方法,这个呢,我们整个LC容器的刷新过程就有这么长,哎,每一步呢,在spring注解版里边,我刚才说了都有,有感兴趣的同学呢,就可以来看,这时刷新IC容器有这么长的代码,它呢主要在这一步叫unrefresh的时候。
08:07
UN refresh,我们可以来看,这个呢,是刷新LC容器,它来调用里边的UN refresh。的IOC容器的IOC容器重写了啊refer方法来,因为呢,这个unrever是我们这个抽象的LC容器里边规定的方法,这是一个空的,而我们当前具体个是一个web应用的LC容器,它重写了这个方法,所以呢就来调这个方法。我们现在看到的是一个嵌入式的web的LC容器,它呢就会有一部叫创建嵌入式的容器。哎。第五步它呢就是web IC容器,会创建嵌入式的server容器,哎主要呢就是这个方法。
09:05
而创建嵌入式容器的第一步,我们来看,我们点进来,点进来第一步呢,就是它调用的这句代码,获取嵌入式的容器工程。就是呢,它就会获取嵌入式的server容器工厂。这是它的第一步,那么它这个获取呢,我们就可以看到这个获取方法点进来,哎,它就是从IOC容器中获取这个组件,所以呢,接下来就进入从IOC容器中,哎,我们get b应获取这个组件,并创建这个组件对象的流程了。嗯,接下来呢,就是从IOC。容器中。C容器中,哎,我们叫容器中获取,获取什么呢?就获取这个组件。
10:08
而这个组件呢,就是我们之前又说的,哎,我们给LC容器中在自动配置的时候加了一个嵌入式的tomcat,诶我们来看,当tomcat类存在的情况下,加了嵌入式的tomcat,只要一获取它,它就创建对象了,好,所以呢,在这一步。我要获取嵌入式容,那么我们这个CA嵌入式容工建。他呢要创建对象,那就惊动了我们这个后置处理器,然后接下来就是我们之前的自动配置流程,然后后置处理器,哎,一看是这个对象就获取。就获取所有的定制器,定制器来先啊,定制咱们这个。
11:04
来,先定制咱们容器的相关配置。所以呢,这就是我们啊重要的第六步,它就在这儿呢,获取斯莱特容器工厂了,那么斯莱特容器工厂一获取,那前边我们说的这个流程就触发了,哎,前边这个流程诶,就触发了我们这个后置处理器,哎,用定制器来帮我们来定制属性,那么接下来呢,第七步,只要这个容器工厂一获取完,我再来放行。我们看到呢。容器工厂获取完了,那下一步就是利用这个容器工厂获取嵌入式的容器,哎,接下来我们把这个代码我拿来。使用容器工厂使用容器工厂获取嵌入式的容器。
12:03
Servel容器,哎,就是这一步,这一步也很核心,那这样的话呢,它就会调用我们Tom k的获取嵌入式solid容器的方法啊好,它在这调方法呢,那自然接下来就创建我们Tom k对象,而且呢,创建完了以后,这一块获取嵌入式solid容器在这把汤姆开塔启动,所以呢,汤姆开塔就在这启动了。然后呢,嵌入式的sol容器创建对象,嵌入式的sorl容器创建对象,并启动咱们这个sol,而我们现在是以Tom cat为例的,那它就来启动Tom cat,这个呢,就是我们整个启动原理,包括即使是汤姆cat特启动了,哎。启动了以后呢,我们的整个IC容器其实还没创建完,哎,我们呢,看一下这个流程,我们说我们只是执行到瑞这一步,比如我给我这打个断点,我再放行。
13:12
来我们发现它来先获取嵌入式的容器,获取完了以后呢才register list,我们先不管它是啥方法,也就是说呢,那IOC容器整断要初始化完在下边,而倒数这个方法就是来初始化IC容器中剩下的所有单式例组件,比在这一步我们自己写的controller service才在这会创建对象,就说呢,我们是先启动先启动。先启动嵌入式啊容器,然后呢,再哎,再将IOC容器中其他。剩下没有没有没有创建出的对象,对象,然后呢,获取出来。
14:06
好,整个的启动流程呢,就是这么多,哎,就是这么多,我们一句话就是IOC容器启动的时候会创建我们嵌入式的so容器,比如说IOC容器启动创建嵌入式的sorl容器,这就是我们嵌入式的sol容器是怎么启动的,就是在IOC容器启动的时候,Web应用的IOC容器它呢就需要创建嵌入式的solid容器,我们这个就启动起来了。
我来说两句