00:00
好,前面呢,我们说了一下切换嵌入式的容器,那么接下来呢,我们就来看一下啊,Boot里边对嵌入式容器的自动配置原理,也就是说我们这个嵌入式的容器是怎么配置上去,怎么工作的,那么呢,我们来参照我们这个自动配置包里边,自动配置包里边有一个外模块。外网模块我们就来看名字,看名字里边呢,有一个就叫嵌入式的容器自动配置,诶在这一块呢,就来自动配置嵌入式的S容器的主要呢,就是来观察这个类就行了,我呢把这个类。哎,我们来给大家放在外边这个呢,就是配置,哎,嵌入式的式的咱们这个容器。自动配置。那么这个自动配置呢,我们来看上,起初首先呢,它说这什么auto confi,咱们这个自动配置configuration,以及con呢啊,Web application,也就是说在我们web应用情况下,我们这个自动配置才生效,然后呢,它还给容器中导了一个组件,这个组件呢,我们后来再说,但是呢,我们先来看第一个环节,第一个环节呢,这有几个配置啊,这是一个配置,只不过这个配置呢,叫conditional on class conditional on class,我把这段配置复制上来。
01:34
Condition on class的作用就是判断我们当前类下是不是有这两个类,一个是原生,一个是Tom k,然后我们导入了Tom k相关依赖啊,我们就会有这一类,相当它是来判断。当前啊,是否引入了咱们这个K依赖。啊,我们默认就是引入嵌入式的tomca,所以有这个tomca依赖,而且呢,接下来它还做了一个判断,这个判断呢叫conditional,啊,Miss容器中没有这个组件,没有哪个组件呢,叫嵌入式的容器工厂。
02:16
判断自己嵌容器工厂。既然它的这个名字都叫工厂的,它的作用那就一定是来干嘛呢啊,创建嵌入式的武器。好,我们呢,就把这两个组件我单独抽出来一个叫嵌入式的容器工厂,诶,这叫嵌入式。
03:01
容器工厂,而这个容器工厂呢,我们把它是做什么的,我点进来,这个容器工厂呢,它就定义了一个方法,我把这个方法拿来。好拿来,拿来以后呢,我们能看到在这个方法里边呢,只有一个方法叫获取嵌入式的通信。它叫获取嵌入式的serverl容器,而获取到的这个组件呢,叫嵌入式的L容器,你看它这个命名都命的非常规则啊,我们这个嵌入式的容器工厂就来获取前面的这个东西的。好,我们这个呢,就叫嵌入式的server late容器,而嵌我们就来看一下嵌入式的servel容器工程有哪些,我们先来看一下这个嵌入式的容器工程,CTRLH打开的继承数,这个呢我们以前看过,诶我们看到呢,它这个工厂呢有这几个,哎,有嵌入式的tomcat容器工厂,还有嵌入式的on top容器工厂,还有嵌入式的解体,也就是说我们BOO呢,能为我们内置嵌入式的tomcat on the top以及解体,我们把这两个呢复制来。
04:26
之前呢,我们都引用过这个图,来,我们来给大家带来引进来。Emergency。好,这个图呢是工厂,工厂呢我们就放上边。叫image,好,这是我们引入了这三个工厂,那这三个工厂呢?那对应能创建的嵌入式的容器,CTRLH打开,那就有对应的三种嵌入式的容器。来有tomcat under to以及阶梯。
05:00
好,我们把这个嵌入式的容器,我们来引引进来。而这些呢,还有一个最重要的逻辑,他们是怎么能自动的给我们配上under to Tom k以及解体呢?其实在这我们来看一下。还是我们这个自动配置,这个自动配置呢,我们能看到如果是so Tom k下来导了to k依赖,就为我们创建一个Tom k serve的嵌入式工程,而如果是导了啊这个阶梯依赖,像这个server,这都是阶梯这个包下的一个类啊,如果导了阶梯一类,就帮我们来放一个阶梯的这个工厂,如果呢,导了on套,就帮我们来放一个on套的嵌入式solid容器工程,所以说它在这有这个判断,正好呢,这个判断就形成了,我们之前要切换容器的时候,我们只需要把汤姆CA的这个依赖移除,我们导入阶梯,那相当于这段配置就生效了,那导入安套,那这一段配置就生效,所以它呢,就是在这一块帮我们来配置各种嵌入式的。
06:16
以以谁为例啊,我们就以咱们这个嵌入式的tomcat容器工程。我们来看一下through boot呢,如果我们引入了tomcat,它呢,给我们容器中就会放一个嵌入式的tomcat容器工厂,它就是嵌入式的这个容器工厂,我们这个关系已经在这儿了,嵌入式的容器工厂里边有Tom k嵌入式的容器工厂,我们来看这个tomcad嵌入式的容器工厂,我点进来,点进来呢,我们主要来看它的,哎,重写的这个方法。哎,这个方法呢,我们能。直接看到他做了什么知道。我们就以嵌入式的这个tomcat容器工厂为例。
07:00
复制进来。以他为例。好。以它为例呢,我们能看到它的这个获取嵌入式的容器,它在这干嘛呢?来创建一个塔开,所以呢,它是在内部用Java代码的方式来创建一个to姆,包括呢,我们能看到下边呢,就是给Tom k的各种关键组件,比如Tom k的连接器,Connect,包括Tom k这个引擎等等,它都在这配置等等我哎这一块呢,就是以下就是来配置Tom k工作的基本环境,配置Tom k的基本环境,这环境这Tom k呢,它在这配完了以后,哎,调用这个方法把他姆cat特传进去啊将。行,咱们这个配置好的,咱们这个tomcat传入进去,然后呢,调用这个方法,那最终肯定要还返回一个嵌入式的容器。
08:06
返回一个嵌入式的容器,好,包括呢调这个方法,大家注意的应该是在这。好,我们调这个方法,把我们的Tom KD传进来了,传进来了以后呢,我点进来我们还能看到,哎,点进来呢,它调的是两个参数的,这个构造器,传了同K的和传了是不是自动启动,什么时候自动启动呢?也就是说只要你的端口号是大于等于零的,我这个同K的就自动启动,自动启动呢,前面呢,把Tom k以及自动启动属性保存来,来调了一个initial light方法,而initial lie我们来注意它在这一块有一个关键的一步,就是启动他开的服务器,所以呢,他们开的服务器也就在这儿启动了。并且启动咱们这个Tom k器,哎,只要这个Tom k嵌入式的容器,哎已经创建出来,那他们K特就启动了,这就是我们说的这个原理,那么接下来呢,就有一个疑问,我们对咱们这个嵌入式容器的这些配置是容器的配置修改是怎么生效的?
09:20
我们以前说呢,我们修改有两种方式,第一种方式呢,我们是改配置文件里边跟server有关的这些属性,其实呢,它是跟properties进行绑定的。好比说呢,我们以前修改呢,是两种方式,第一种呢,是我们来修改serve里面的东西,第二种呢,说我们说是这么来做,哎,我们把我们以前的con so con,第二种呢,我们自己来放一个嵌入式的so容器定制器。所以呢,现在又有一个我们这个嵌入式容器。
10:05
好,我们把这个格式调一下。我们这个嵌入式solid容器的定制器,这是我们以前用过的,而我们说这个定制器,而这个server properties server properties。那咱们这个咱们这个容器的一些配置,比如单。原。的原理怎么修改呢?我们现在就要追踪上一个组件了,什么组件呢?我们之前没分析的这个。之前呢,我们说它呢,给容器中倒了一个这个东西。导入了一个叫并post process register叫后置处理器的注册器,这个呢,在我们这个spring同步发行的这个spring注解版里边啊,有讲这个原理,我就在这儿不详细说了,它的这个作用就是给容器中导入一些组件,也是导入一些组件,我们这个register呢,就是来导件,导什么呢?我们就点进这个register。
11:23
我们看它的这个自动配置啊,嵌入式容器自动配置,自动配置之前呢,它用这个给容器中导组件,导什么组件呢?最重要的是导这个组件,它利用这个register给容器中注册组件,注册了一个它叫。嵌入式的容器,定制器的后置处理器,哎,那就一句话。它呢,导入了这个处理后置处理器,我们就得说一件事,就是这个being post process,它叫后置处理,后置处理器的作用呢,就是在B初始化前后。
12:05
初始化前后,哎,执行咱们这个。执行执行咱们这个呃呃前置或者后置的一些逻辑,而这个初始化前后其实就是刚创建完对象。刚创建完对象,还没属性赋值。还没属性赋值赋值,然后呢,它执行一些初始化工作。而我们可以来分析一下这个embed嵌入式的容器,定制器的后置处理器,哎,我们第四个第五个原理。就是呢,我们这个容器中有一个组件,容器中也导入了这个组件叫嵌入式的容器定制器的后置处置器,大家来看啊,跟这个命名啊,它非常有关联,我们试用嵌入式的solid容器定制器修改这个配置的啊,这个定制器呢,有一个后置处理器,后置处理器啊,我们来看它的这个作用,我把这个后置处理器点进来,这个后置处理器呢,来我主要把这段代码复制来,CTRLC。
13:27
我们来看一下这个代码,这段代码呢,就是在我们这个叫post process。In啊,然后呢,它是在我们这个。哎,初始化,初始化之前我们说了,初始化之前就是我们这个对象创建好,还没属性赋值,然后呢,他在这判断判断。如果当前组件,如果当前初始化的一个这个类型的组件。
14:00
类型的组件,它呢,就调用下边的这个方法,调用叫啊下边的这个方法,而下边的这个方法呢,啊叫初始化方法,我来点进来,下边的这个方法呢,我们就能看到这是一个负循环,我就直接把这个方法也拿来复制在这儿来对比一下就出来了。这个for循环干了什么事呢?哎,他就要get custom,相当于拿到所有的定制器,诶你看这就是我们的这个定制器,然后呢,调用每一个定制器的custom方法,它就是来获取所有的定制器调用。每一个定制器。定制器的咱们这个customers方法来给咱们这个什么呢?给咱们这个容器赋值,容器进行属性赋值,比如来赋一些。
15:02
进行属性赋值,比如呢,它来赋一些端口号啦,访问路径啦等等,而这个get customers我们也能看到,它呢,就是下边的这个方法,下边的这个方法呢,哎,我来复制来,它的核心就只有一处,哪一处呢,就是在这儿用b function,也就是我们的IOC容器,从IOC容器中按照类型获取什么组件呢?获取我们嵌入式的容器定制器,所以说呢,它只有一个核心,它就是从容器中获取所有这个类型的图从容器中。获取所有这个。这个类型的组件哪个类型呢?就是它,所以说我们从这一块也得到一个结论,就是想要定制咱们这个set容器,就像我们之前做的一样,我们来给容器中可以添加一个。
16:04
这个类型的组件,那正好我们的这种写法就是这样,我们以前的时候配置,哎,我想要定制,我呢就给容器中添了一个这个组件就定制好了。那另外一个就是我们属性文件上的这些又是怎么怎么给复制上呢?我点进来,我们说我们server的这些属性配置,其实呢是跟server properties绑定的,但是大家也注意server properties也是什么啊,也是我们这个嵌入式的容器定制器,所以说呢,它都一样。哎,我们来说一下这个,我们说一下这个server properties,它也是这个定制器,Server properties也是定制题,那我们说到这儿了,我们就可以把整个流程给大家串起来,看我们这个是怎么工作的,我怎么串呢?首先我们来到这个自动配置,这个自动配置呢,首先spring boot根据我们导包情况,给我们容器中添加这些啊嵌入式的容器工程组件。
17:15
这是我们的这个啊步骤。第一个根据根据根据导入的咱们这个依赖情况。依赖情况,然后呢,给容器中,给容器中添加相应的。啊,咱们这个嵌入式容器工厂,哎,我就拿一个为例,哎,我拿它为例,添加相应的。这个嵌入式容器工厂,那比如呢,哎,比如我们就填了一个tomcat嵌入式的容器工程。那一旦我们这个组件被加在容器中以后,接下来第二步,因为我们呢,还有一个后置处理器,我们刚才说了有一个这个后置处理器。
18:21
要创建对象,就会咱们这个惊动咱们这个惊动我们的这个后置处理器,那后置处理器就要进行工作了来,而后置处理器是怎么介入呢?我们来点进来就是这个后置处理器,后置处理器呢,它判断你是不是coned select container,而我们crh。我们这个Tom cat,嵌入式的这个容器工厂,这三个容器工厂都是我们可配置的,所以说呢,只要添加的是嵌入式容器工厂,只要是嵌入式的,嵌入式的server容器工程,那我们这个后置处理器就工作。
19:08
就工作,而它是怎么工作呢?它的作用,我们刚才说了,它的这个工作作用,后置处理器,后置后置处理器它是从容器中,从容器中获取所有的啊,获取所有的我们来看后置处理器,但获取所有的嵌入式容器的定制器,获取所有的定制器,然后呢,调用定制器的定制方法,而所有的定制器里边呢,我们来看我们这个properties。哎,它呢就是这个定制,就是这个定制器,而它下边的定制方法呢,都在这儿,又帮我们这个嵌入式solid容器来设置端口号设置啊,咱们访问路径等等等等,这样呢,他们就启动了,哎,就是咱们这三个顺序。
我来说两句