00:00
好,然后再往下呢,咱们来看那dispater solvele,然后初始化的过程,对吧?首先呢,大家要知道这个东西的本质就是一个solvele,所以说它是天然遵循我们当前的solvele的生命周期的,大家说对不对,对吧?那所以我们要想来看这个东西是怎么进行初始化的,其实咱们只要一层一层的去找就可以,大家说对不对啊,对吧,好,OK,那下面咱们把咱们的代码给打开啊,好,我们首先咱们先来找到谁呀,咱们的dispat solve that dispat solve that,大家看应该是在这呢,没问题吧,来,咱们把这个东西给打开,好,首先咱们先回到咱们的最上边,大家可以看到它应该是继承了。来往下走,走到这大家看它应该是继承了咱们的framework of framework of是不是应该是什么意思啊,Framework是不是应该是框架的意思,是不是啊,对吧,叫做框架的solve,那咱们把这个东西点开之后,大家会发现它又继承了咱们的http solve b OK吧,好,当我们把这个东西再打开,大家会发现它就继承了http solve,能看懂不来再把它打开,它继承了generate solve,从这开始,其实咱们就已经咱们都学过了,是不是,是吧,然后http solve generate solve generate solve是不是又实现了solve接口,是不是啊,OK,来吧,开始首先。
01:39
初始化在solve最原始的接口里面,应该是咱们的init方法,大家说对不对啊,对吧?好,然后我们在这呢,咱们把咱们当前的structure,也就是我们当前的一个结构给打开,然后咱们来找一下咱们相对应的方法啊,首先呢,在solve接口里面,然后咱们的初始化是盈利的,咱们现在只考虑它是如何初始化的,能听懂吧,好,OK啊,来,那在这个方法应该是一个什么方法啊,应该是一个抽象方法,那所以在它的子类,在它的实现类中是不是应该进行了重写,也就是在咱们的genes of里面是不是应该进行了重写,对不对?那它是怎么来重写的呢?来咱们来找一下就行,大家看这有两个引ite,大家说这两个inite哪一个应该是重写的,哪一个应该是重载的啊,哪个是重写的,哪个是重载的,这俩一样不一样不一样吧。
02:40
你看上面在这是不是有一个向上的箭头指向solve light的对不对,那这个就是重写了solve light中的音力的方法,能看懂吧,能看懂不好,大家看,你看在这儿,然后大家以后怎么去看是不是重写的,就看这后边有没有这个箭头,如果有的话,这就是重写了谁哪一个类或哪一个接口中的方法,能听懂不能听懂吧,好OK啊,来吧,大家看,咱们先来看它,大家会发现他干了点啥,先把咱们当前咱们的成员变量,先把咱们的成员变啊这个局部变量会成员变量赋了值,赋了值之后来调用了咱们的没有参数的inite,对不对?所以说下面咱们再来看这个引ite,大家会发现这个inite中有没有任何的内容啊,没有,那没有的话,那咱们是不是就接着往下看,是不是就OK了,对不对,对吧,咱们来找到咱们的HTTP所,大家知道咱们为什么要这样去看嘛,咱们。
03:40
现在看的是不是应该是一个调用的过程,虽然说我们现在看的是一个在不同的类中调用的过程,但是其实真正的如果咱们把这些东西都通过继承或实现放在了同一个类中,其实咱们当前就是在同一个类中来查看这些方法的调用的,大家说对不对?这个大家能听懂吗?
04:06
就是经过继承和实现呢,然后咱们当前接口中或父类中的方法是不是都会继承给他的子类啊,或者实现类啊,是不是啊,虽然说咱们现在你看我在这儿看到的是不是应该是这个因力,但是大家说这两个因力的方法是不是都会干什么继承给他的子类httb solvele能看懂不?所以说在这个类里面有没有那两个引利的方法啊,有的啊,来咱们再往下看,大家看你看从这里面咱们看出来这里面有音力的方法没有啊,大家看一下,来看看这里面有音力的方法吗?没有,那没有引利的方法,那说明了啥?那说明我们当前咱们的http solve里边有没有对这个引利的方法进行重写啊,没有,它直接用的就是generate solveet中的inite没问题吧,好,OK,来,再往下看,那它是不是继承了它呀,是不是,那所以咱们再往下。
05:07
大家看一下,大家看youit没有有,而且这里面的init方法大家看是继承了谁的gene so中的,为什么继承了它,因为http solvele中没有重写嘛,大家说是不是啊,对吧?好,OK,来咱们看它大家看啊,里边的内容啊比较多,咱们主要看重要的一点,OK吧,好在这个阴力的方法中。然后他都干了点啥呢?往下直接往下看啊看这他又调用了咱们的in solve let bin,看到了没,看到了吧,所以说咱们直接来看这个方法就行,OK吧,然后咱们来点开之后,大家会发现这个方法里面什么都没有写,对不对,是不是啊,对吧,但是咱们经过我们刚才咱们的这个过程,大家会知道我们当前初始化的方法经过一系列的调用,现在已经调到这儿,大家说对不对,对吧?好,那如果咱们现在再去看它的子类的话,那它的初始化的过程,它只要不对咱们上面的in的方法进行重写,那我们是不是只要来看历solve let b就可以,大家说对不对,能听懂吧,好,OK,来,咱们来往这里面看,大家看啊,这里面有没有in it solve that b呢?有没有有,然后咱们把它给点开之后,大家再看这里面有。
06:35
其他的in没有,有没有直这个initt in方法没有没有,那说明什么?那我们当前这里面的in是不是来使用的,就是它之前的接口或实现类或它的父类中是不是继承给他的,对不对,对不对,对吧?好,那在继承的这些方法中是不是调用了in it solve let b呢?那所以咱们紧接着要来看的是不是就是它对不对?好,然后咱们看到这之后咱们来看一下咱们的这个图,大家看啊,So中的in it。
07:10
调用了谁?Genes of中的in,这个in又调用了这个in,刚才咱们看这个过程了啊,是不是?然后这个in又调用了咱们的httb solve b中的in,对不对?然后这个init又调用了咱们的in solve b,没问题吧?好,然后这个init solve b在frame solve里framework solve里面是不是又进行了重写啊?我们当前所在的位置不就是framework solve solve里面的这个方法吗?是不是啊,那在这个方法里面它又干了点什么呢?来,咱们接着往下看,大家看看这个地方啊,来看这个地方啊,来看看。看这这是啥,这什么是不是叫做初始化web application context呀?那web application context大家知道不?我们原来在学习spring的时候是不是说过对吧?然后咱们当前创建的IOC容器,如果说是Java工程的话,是不是应该是谁?应该就是application contest,如果我们是we部环境,那是不是应该创建的就是we部application contest对不对?所以说我们当前spring VC咱们也可以这样说,其实这个就是对咱们spring VC的IOC容器进行初始化的,大家说对不对,是不是啊,对吧,好,OK,那就看呗,来下面东西还有很多,这里面咱们主要你看这是不是应该是有异常的时候才执行它,那所以咱们只要来看这一句话是不是就可以了,对不对,对吧,好,来咱们看它啊,它在哪呢?就在这儿,看到了没看到了吧,然后咱们来。
09:00
点开首先呢,大家来看一下啊。好,他先干什么了,他先通过我们当前的这个工具类啊,然后来获取了一下我们当前的web application contest,其实这一句话大家刚才应该见过的,大家见了没有,我们在咱们刚才写的那个什么写咱们的视图解析器的时候,咱们就用到了这一句话。哎,大家有印象没有,有印象吧,咱们就用到了这一句话啊,好,然后下面它在这是不是又创建了一个wac等于null,能看懂不好,然后下面它在这来判断,如果当它不等于空的话,怎么怎么办?如果说不等于空怎么怎么办,咱们不管啊,大家注意,这个东西它肯定是等于空的,因为咱们根本就没有对它进行任何的操作,大家说对不对,我们是从头看到这儿的嘛,是不是啊,咱们刚才是不是才调用这个方法,那所以说咱们当前的这个web application contest对象,大家知道这个东西在哪吧,这个东西在这儿呢?啊看大家看,就是这个东西看到了吧,这个东西就是由这个方法获取的,但是在这个方法里面,它是不是就直接来判断它是否为空了,是不是啊,对吧,那咱们这个方法你第一次执行的时候,它会它会有直不会,不会,所以说它肯定是等于空的,所以这个if会直行不坏,不会啊来如果横等于空,怎么地去找一下,能找着不能呢?找不到,然后所以说它还是空,那还是空怎么办?在这儿他就去创建了一个web application context。
10:50
能看懂不?那行啊好,所以说我们下面咱们需要来看的方法应该是谁啊?应该是咱们的create web application context的,能看懂不来我在笔记里面给大家写的都有啊好,大家来看咱们刚才是不是应该是看到这的是不是啊,Init web application context的,然后咱们应该是看到哪了呢?大家看我在这里面给大家写中文的地方是让大家自己去看的,能听懂,不需要大家重点去注意的啊,咱们刚才是不是也看到这儿了,对不对,干什么?是不是去创建一个web application connect呀,对不对?大家来看它是怎么创建的啊,来进入到这个方法中,直接CTRL加鼠标左键是不是就能进去啊?好,然后下面咱们点进去之后,大家看又调用了一个方法,是不是他写的就非常的怪异,大家。
11:50
有没有发现啊,哎,大家有没有发现他写的就非常的怪异啊,在这儿它调用了一下我们当前咱们的这个方法是不是啊,看调用的这个方法是不是应该就是我们当前咱们的,你看来调用的,大家看是不是是不是在这儿呢?是吧,好,然后下面咱们再来进行点击,大家看是不是就跑到这个位置了,能看懂吧,好,然后这里面它是怎么去做的呢?首先呢。
12:21
大家看这一句话,是来创建一个configuable web application cont的,大家还记不记得咱们原来讲过configuable,咱们的application contest里面是不是应该也有以这个开除的IC容器对象啊?有印象没有,有印象吧,因为咱们那个这个东西这里面好像是具有什么关闭和刷新的功能,大家还有印象没有,有印象吧?哎,行啊,好,这个是通过反射来创建了一个这样的对象,然后创建完之后在这儿来设置它的环境,还有一个就是来设置它的parent,那什么叫做parent呢?Parent是来设置它的负容器,不是它的负类,那这个东西副容器到底是干什么的呢?大家注意啊,这个在咱们SSM整合的过程中啊,然后咱们的spring VC跟咱们的spring是需要分开整合的,知道吧,如果说咱们要不分开整合,就是咱们的这个,也就是说什么意思啊,现在咱们的SSM整合之后,大家会发现spring跟spring VC是不是天然就能够无缝衔接,对不对?那这个时候咱们就需要考虑一个问题,我们的spring跟spring VC。
13:40
需不需要整合?如果不需要整合,他俩共用一个配置文件就行,能听懂不?而如果需要整合,就是各管各的,能听懂不?大家说需不需要整合呀,都行,哎,都行啊,整合也行,不整合也行,我们现在推荐大家整合就是各管各的,你想想你在SPVC中写了多少东西。
14:09
SPVC中咱们配置了八个内容,是不是SP spring里面我就跟大家说更多知道不,所以说咱们让他们各管各的,但是以后大家也会遇到一些比较特殊的情况,我们就是要把spring跟spring VC不整合的,也就是让他们两个共用一个配置文件,能听懂不好,那现在这个parent是什么意思呢?大家注意,如果我们当前咱们的spring跟spring VC完成了整合之后。完成了整合之后,是不是各管各的,那所以咱们要创建的IOC容器是不是就有了两个呀,一个是咱们的web application contest IOC容器,Spring mvc的IC,一个是咱们spring的IOC,这个大家能听懂吧,不要科学啊。
15:05
不要喝水啊。好,然后呢,那咱们现在就有了两个IOC容器,那大家注意这两个LC容器,它们之间是有关系的,什么关系呢?大家记好,我们spring mvc的IOC容器是子容器,而我们当前咱们spring的IOC容器是负容器,所以说在这儿set parent是什么意思啊,就是将我们的IOC容器啊,Spring的IOC容器,然后来设置为咱们spring VC的负容器,能听懂吧?哎,是这样的啊。好,然后下面别的不说了啊,再往下,然后咱们也不管它怎么创建的,然后最终咱们创建了一个wac之后,也就是咱们的web application contest之后,直接干嘛进行返回,OK吧,好,那我们到这儿,咱们这个看的方法是不是创建web application contest的过程,对不对?那创建完了咱们是不是应该回到咱们的这个地方,大家看那在哪创建呢?啊,是不是在这儿创建呢?对吧?那创建完之后它下边是不是还有内容呢?能看懂不?那这下边来写的是啥呢呀,大家看好了,来看这个地方,这个地方有一个叫做onresh什么意思,On是当什么什么时resh refresh是不是应该是刷新的意思,对不对?好,这个就是触发刷新事件,如果我们当前需要干嘛呢?咱们是不是创建完我们的WC之后,我们是不是要去刷新它,好然后咱们是怎么去刷。
16:43
因它的呢,来咱们先不说,咱们先再往下看,大家看这儿啊,好,然后这个地方大家一定能看懂,一定能看懂啊,首先大家先来看这个叫get solve that context的attribute name,来获取一个咱们that context的一个属性名干嘛呢?Get solve contact的方法是干啥的?是不是来获取咱们的solve contact对象啊,是不是,然后点set attribute干啥?是不是来共享数据啊,对吧?把谁进行了共享,把咱们的web application contest进行了共享,能看懂吧?好,然后这个东西是个啥属性名,也就是说以它为属性名,以它为属性值在咱们当前的应用域中进行共享,能听懂不能听懂吧,好,OK啊,行来。
17:40
那进行了共享,那所以说其实咱们也能够获得这个IOC容器,能听懂不能听懂吧,其实咱们也可以获取spring l VC的IOC容器啊,那这个东西长什么样?确实是比较的麻烦,咱们简单看一眼OK吧,好,首先大家先看这个方法,然后这个方法来返回的是啥?返回的是我们当前咱们的这个什么serve that context prex,然后又加上了咱们的get solve that name,这东西大家见过没有,Get solve that name是不是获取咱们solve that的友好名称,其实就是我们在注册dispa solve的时候的solvele-name的值,能听懂不好,然后再往下,那它前面这个东西是啥呢?咱们把它给点开之后,大家来看是啥frame framework so.class.get name,也就是当前这一。
18:41
各类的全类名,加上点context的,再加上点我们刚才所看到的那个内容,也就是咱们当前注册dispat solve的solve-name的值,能听懂不能听懂吧?这不就是一个字符串拼接吗?
19:04
你你能听懂,这是字符串拼接吧,可以吧,但是说实话,你说这个东西拼完之后长什么样,那你这得想一会儿了是不是啊,这东西的权类名加点context,然后再点加上咱们的,咱们注册的时候,它的solvele杠内容应该就是叫dispa solve对不对,然后再点dispature of是不是,哎,这个东西,但是咱们一般情况下,咱们是不会获取这个LC容器的,能听懂不?所以说你知道当前它的键是什么就行,能听懂不?哎,好啊好,然后下面呢,我们再来找到咱们的这个方法,咱们刚才是不是说过,哎,这个东西咱们看完了,在它之前咱们创建是不是也看完了,然后下面咱们来看这个刷新咱们当前的这个容器,然后它是怎么刷新的呢?咱们把这个方法点开之后,看这里面啥都没有,是不是你给我们的注释是for s classes啥意思啊?
20:04
嗯。让谁来进行刷新的?For class这不知道啥意思吗?停。哎,这都不知道什么意思啊。这是RZ的意思,知道不萨class吗?这是子类的意思,知道吧?啊,这是子类的意思,Super啊,Super对应this是不是啊,好,然后这个大家注意啊,这个sub classes指的应该是子类的意思啊,然后呢,我们当前的on refresh,然后是让谁来执行的,让它的子类去执行的,对不对?那它的子类是谁啊,他的子类是谁啊,他的子类是谁?我们是从这点到了这点到了这点到了这点到了这点到了这它的子类是谁啊,Dispa of that是吧?忘的是贼快啊。
21:11
好,然后大家来看这里面呢,然后有一个叫做onf freshsh方法,然后在onf freshsh方法里面,然后它又去调用了一个我们当前的it stratteg,对不对,Stra strategies,然后这个是什么意思,应该是策略的意思,对吧?好,叫做初始化策略,那所以说大家看咱们从这里面我们就能够看出来,如果说我们当前咱们的这个方法中,我们创建完了咱们的spring VC的IOC容器对象之后,然后在这儿它是不是就需要进行刷新,在刷新里面是不是就调用了我们当前的一个初始化策略,对不对,对吧,初始化完成之后,然后最后是不是应该是将我们当前的IOC容器共享到了咱们的应用育种,对不对,对不对,对吧,好,OK,那下面呢,那咱们就来看一下,看这里面的写的是什么啊好,然后我们点击进去之后,大家来看这里面呢,就是有这样。
22:12
了一大堆是吧,其实这里面好多大家都认识的啊,比如说这个东西叫做初始化multi part serve干啥的,是不是咱们的初始化咱们当前的文件上传解析器啊,对不对?好,不认识的咱们不说,然后大家再来看在这初始化handler maps handler mapping,咱们刚才是不是说过叫做处理器映射器对不对,对吧,干啥的,通过它咱们是不是可以通将咱们的请求跟咱们的控制器方法创建映射关系,对不对,对吧?好,有了它之后大家再来看看这个东西,这个是不是应该是来初始化我们当前的处理器适配器干什么的,来调用我们所我们所对应的控制器方法,这个是找控制器方法,这个是找到之后去干嘛调用处理控制器方法,能听懂吗?好,再往下,这是啥初始化什么handler?
23:12
Exception resource干啥的?咱们的异常处理器能听懂不好?OK,再往下这个东西干啥的?初始化视图解析器能看懂不?所以说大家想在我们的spring VC的配置文件在加载的时候,这个东西是什么时候加载的?就是我们当前的dispatchle在进行初始化的时候进行加载的,能听懂不好啊?所以说为什么咱们在注册dispatch of的时候要加上咱们的load on start up,大家想咱们刚才看到的这个过程,从这儿掉到这儿,然后这里面又掉到了这儿,这儿呢,又掉到了这儿,这儿又掉到了这儿。我们当前dispat solve的初始化过程复杂不复杂,复杂要完成的事情这么多,如果咱们把这么多的内容全部都放在咱们第一次访问时初始化,那是不是就会严重影响咱们第一次访问的速度,对不对,能听懂吧,好啊行。
24:12
各大家要注意啊,好,然后下面呢,大家来看一下啊,咱们的笔记里面我给大家写出来了,这是创建,然后这个是刷新,然后这个是在I将IC容器过在应用于共享,OK吧,我下边给大家写的这个就是我们当前这个创建的一个过程,好然后通过反射创建IOC容器对象,然后在这是设置负容器,好然后咱们看完这个之后,那我们当前创建we部application content是不是就完了,对不对?下面咱们需要来看的是谁刷新,怎么刷新呢?看啊。在它里面创建完之后,然后刷新容器,调用了咱们的on refresh,此方法在dispar of RA中进行了重写,大家说对不对,这能看懂不能看懂吧,大家应该能通过咱们这里面的描述知道从哪往哪看吧,知道吧,好,然后这个方法在咱们的frame of里面,Frame of framework of里面,这个东西有没有,有没有被重写啊,这这个这个方法里面有没有内容啊,没有任何内容能看懂吧,所以说咱们得去找到它的子类,然后在子类里面找到on freshsh是不是调用了咱们的初始化策略对不对,然后再调用咱们的初始化策略方法,然后来看我们最终的一个初始化的过程,能看懂不能看懂吗?哎,好啊,好,然后咱们来看,这就是我们当前的一个初始化的过程啊。
25:50
复杂不复杂,哎,确实是挺复杂的,是不是里面就是各种调啊,调过来调过去,调过来调过去是不是啊,哎,还挺复杂的啊好,那下面咱们。
我来说两句