00:00
好,那下面呢,我们就简单的去创建一个工程,然后来测试一下咱们的contest loader的功能。大家注意,非常的简单,然后我们只需要呢,去创建spring mvc的配置文件,Spring的配置文件对吧?然后创建完之后呢,然后咱们把控制层交给咱们的spring VC进行管理,然后把咱们的service的组件,然后交给咱们的spring进行管理,然后咱们直接来启动一些项目就可以知道吧,直接来启动我们当前的工程就行啊,如果说他没有报错,那就说明我们当前配置的没有任何问题,如果说他要报错了,那就说明配置的有问题呗。有的老师为什么启动一些项目就行了,不需要去访问别的东西吗?是为啥?因为我们spring m VC,它的IC容器是在我们当前咱们服务器启动的时候,咱们去执行dispatch solve的初始化的过程中,对吧,然后来创建的IOC,那所以说它的自动装配是不是也是在服务器,服务器这个启动的过程中,然后来完成的,那所以说我们如果你的controller是能够访问到我们的service的。
01:10
那这个时候大家想一下,那这个时候我们是不是就说明我们当前咱们spring的这个监听器是没有任何问题的,对不对,对吧?好来下面咱们把这些东西啊都给它关掉,然后呢,我们再来创建一个新的工程,然后这个工程呢,咱们就叫做spring。啊,叫做spring,然后下划线,然后叫listen ls OK,啊行,然后它的group ID是com.at硅谷,然后点击finish,然后来把我们当前咱们的一些依赖呢,然后咱们给它引入进来啊,比如说大家随便去找一个就可以。咱们呢,就找到这个hello word就行啊好,然后咱们复制,然后把它给放在这个位置,然后input的近体色,然后去添加我们当前咱们的we部模块,然后来找到spring listener啊好,然后在这咱们来添加一个web,点叉名是src,然后下面的慢。
02:10
然后斜线web APP。然后o oko apply,然后OK就可以了啊,好,然后下面呢,我们是不是再进行配置,然后大家来看啊,然后我们需要来配置什么,咱们spring啊,然后咱们当前的web.X苗,大家注意我们当前那两个过滤器咱们就不配置了啊,咱们主要来看的就是我们的control里面能否来完成service的,能够能否来完成咱们的这个service的自动装配啊,所以说呢,咱们直接来设置,直接来这个配置我们当前的前端控制器叫做spring mvc,然后solve class,然后叫做dispat solve that,好,然后在这咱们再来设置这个初始化参数,来配置spring VC的配置文件,叫做spring mvc,点叉L,好,然后最后呢,咱们再来设置load on startup就可以啊,然后solve let mapping,然后SP斜线。
03:11
好,OK,然后再往下,咱们是不是就要来设置这个监听器了,对不对,然后叫什么叫做context loader listener叫做。Context loader listener在这呢?啊好,然后这个东西它是用来干什么的?大家来看是在咱们的服务器启动时,然后来加载咱们spring m spring的配置文件,然后来获取IC容器,啊好,然后再往下,大家来看下面咱们是不是如果你因为如果说咱们只配置这个的话,那spring的配置文件它默认应该在web info下,名字叫application context,而我们一般咱们的配置文件是不是都要放在resource下,对不对?所以说大家看一下,那我们在这咱们是不是就可以来设置什么,设置一个context的per,然后它的这个参数名呢,也是叫context convi location。
04:09
然后咱们spring的配置文件,咱们就可以直接来写spring的XML,当然了,大家叫什么都可以啊,好。然后下面咱们是不是就要来创建两个配置文件了,比如说然后我们再来找到咱们的hello word,然后呢,来把我们当前咱们的配置文件呢,然后直接给复制过来,然后放到这儿,然后这里面咱们现在目前咱们就只需要去配置一个扫描组件和咱们的视图解析器就行。别的咱们都不需要去配置啊,好,然后下面呢,我们再来看,然后在这咱们是不是可以再创建一个spring的配置文件,然后这个咱们就叫做spring的X。OK吧,好,然后大家来看一下啊,咱们可以来设置一个首页,来创建一个目录。然后这里面咱们来创建一个叫做index.html。
05:02
好,OK,这叫首页,然后是index.htmlok啊。加上一个标题吧。好,然后咱们把首页创建完,那如果我要来,我要想来访问首页的话,那我们是不是就需要来设置一个MVC的注解驱动,然后我们是不是还需要来设置一个MVC冒号叫做view control了?哦,对,大家注意这个地方啊,你看好了,我写错了知道吧,为什么写错了呢?因为你看我现在我再去访问咱们的MVC的MVC的时候,这里面是不是什么都没有了,对不对,对吧,然后没有那个什么default solve that handle,也没有interceptors,然后也没有我们的view control,为什么大家看啊,你看我后边所选的这个命名空间是不是catch启的。对吧?然后我们现在所使用的命名空间是不是应该是MVC中的标签对不对,对吧?所以说啊,大家一定要把咱们当前的命名空间给选对了啊,叫on gun driver,你看光gun driver是不是就好几个,咱们应该选择这个啊,大家看好,行,然后再往下MVC冒号view controller,对吧?然后我们的路径是斜线,然后我们当前的视图名称直接设置为index就行,知道为什么要设置它吗?因为如果我们只设置它,那只有试图控制器所对应的请求才会被处理。
06:31
然后咱们所写的其他的请求映射会被处理吗?不会,所以说这个时候我们必须要把它给配置成啊。好,然后呢,我们SPAVC就配置完了,下面咱们就可以来配置spring,比如说大家看,我先把咱们的组件给创建出来,叫做com.at硅谷,然后点control,然后点咱们就叫做hello count control,然后在这大家注意咱们要加上一个control注解,然后我们现在呢,咱们再来创建咱们的service,比如说咱们先来创建一个包,这个包咱们就叫SE SE service包,然后这个包下呢,然后咱们再来创建一个类,然后这个类呢,比如说咱们也是啊,把它给写全了,叫做hello service,然后这个接口。
07:22
然后接口创建完再来创建咱们当前的实现类,叫IMPL.hello service I m PL行,然后是I plays hello service行,然后这个地方大家注意,那我们的业务层是不是要加上a service注解对不对?然后我们现在是要在咱们的control里面来自动装配咱们的service的,来啊叫做eight o wild,然后private hello service hello service就可以啊行,大家看一下,好,但是你看他现在报错了,为什么报错,因为没你没有办法完成自动装配,知道吧,为啥?因为在我们当前咱们spring的配置文件中,你什么都没有写嘛,对不对,我们在这咱们需要怎么去写,大家想一下,是不是应该也是扫描组件,而我们现在咱们需要来扫描的组件,咱们用的标签啊叫context冒号component sc。
08:21
然后呢,咱们的这个包咱们就设置成com.a硅谷点service.ipl就行,对不对?好,下面大家再来找到咱们的control,大家看还报错误报了。是不是就不报错了呀,对不对,好,当然呢,那我们还是来重启一下,来启动一下,来访问一下这个工程,看它有没有问题就行啊好,咱们来找到咱们的tomcat,把这个工程给它干掉,然后咱们再来添加一个叫做spring。Listener对不对?好,然后咱们当前咱们的这一个名字,咱们就叫做spring吧,好,然后这个地方呢,是第三个,或者说你不配置也行,因为我们现在咱们只要来启动就可以啊,然后现在咱们来启动一下,大家看啊,然后因为我们需要在controller里面来完成service的自动装配,那所以说我们的这个MVC,然后就是我们spring VC的配置文件,它的IOC容器是在什么时候来获取的,大家看,因为我们设置的有这个标签,那所以说spring VC的IC容器,它是不是应该也是在咱们的dispat solve初始化的时候完成的,而加入了这个标签之后,它的初始化就到什么时候了,服务器启动时了,对不对?好,咱们直接跳过啊。
09:38
他就到服务器启动时了。OK吧,那所以说呢,我现在我是要来,我要想来完成咱们controller里面对service的自动装配,那所以说我们当前咱们的service的B是不是一定是提前存在于我们的IOC容器中的。对不对,好,而我们service的,我们service的这个病是在谁的IOC容器中呢?是在咱们spring的IOC容器中,大家看一下。
10:04
对吧,那所以说我们当前spring的IOC容器,然后它就要怎么样啊,提前与我们当前spring VC的IOC容器来创建。而我们当前spring的IOC容器在哪来创建的,我们刚才是不是已经看过咱们的这个监听器里面的代码了,对不对,然后它就是在我们当前的这个监听器中来创建的,是不是啊,对吧?好,而监听器的初始化时间它一定是要比咱们solve that的dispa solve的初始化时间要早的,那所以说在dispat of初始化的时候,大家想一下,在获取spring VC的IC容器的时候,那我们是不是就可以来完成我们当前控制层组件中对于service的一个自动装配的,对不对?好啊,行,大家看一下,你看咱们启动的过程中有没有报错呀。是不是没报错呀,对不对,好,现在咱们的首页咱们是不是也能够访问得到,对不对,好啊好,大家看,那如果我们现在咱们这样,如果你没有去配置这个监听器,对吧,然后咱们把这些这个把这个监听器,然后咱们给它注释掉,然后咱们再来找到我们的CTR,你看这个地方的报错了没有,没有报错,然后我们现在咱们再来一个重新部署,大家看啊,我先清空一下。
11:23
嗯,好,大家往下走,然后你看直接就报错了,为啥呢?那是因为我们的重新部署,咱们说的就相当于服务器重启吗?那服务器重启的时候,它是不是就需要来重新去加载dispas,重新去执行。Dispatch solve的初始化的过程对不对,对吧?那初始化的过程中就要来获取spring Mac的IC容器,那它就要来完成我们当前所管理的组件中的一个自动装配的功能,而我们当前呢?咱们在这个IC容器中有这个service吗?大家注意是没有的,知道吧,是没有的,而且我们也没有配置监听器,咱们spring的IOC容器是不是压根就没有创建,对不对?好,大家来看,你看他报的什么错?很简单,他报的错就是no such病,DeFinition exception没有足够的并被发现异常,见过没有?
12:17
见过吧,还有后边这个什么auto well required true,咱们之前在讲基于注解的自动装配的时候,这个问题大家应该都见过,是因为什么?是因为我在完成自动装配的时候,IOC容器中没有任何一个能够没有任何一个B能够来完成自动装配,对不对,没有任何一个类型匹配的病能够来完成自动装配啊,好,所以大家看,这就是我们当前的一个效果,如果你没有配置监听器。对吧,或者说你的监听器,或者说我们spring的IOC容器在获取的时候,对吧,要晚于我们DIS4PA solve中初始化的过程,也就是咱们获取spring VC的IC容器的时这个时间,那咱们在这报的是同样的错,所以说我们把监听器给配置上就没有任何问题了,然后它的这个spring的一个IC容器的创建时间一定是优先于咱们spring VC的IOC容器的创建的,对不对,好啊。
13:15
好,那可能有的同学会有疑问,说老师他俩是两个IC容器,那我们怎么就能够相互进行,咱们怎么就能够在这个spring mvc的IC容器中去访问到咱们spring的IOC容器中的内容呢?大家看好啊,然后呢,大家还记不记得我们之前啊,然后咱们在讲这个dispatch solvele的时候,然后呢,我们在讲它的初始化的时候啊,然后我们之前咱们见过一段代码,见过一段什么代码呢?然后咱们来找一下啊,这个初始化。来,咱们继续往上来找到初始化,大家注意就在这儿呢。这是我们当前咱们的SPVC,然后它的这个初始化,这个dispatch,它初始化的过程,然后它的初始化的过程,然后咱们所看到的这个这这个方法啊,叫create web application contest的,然后这个方法就是来创建咱们spring VC的IC容器的,然后他在这来执行了一个代码,执行了什么叫做Wac.set parent,大家注意这个wac就是我们当前的IOC容器。
14:23
然后来给他设置了一个负容器,然后这个负容器是谁呢?大家有印象吗?我之前跟大家提过一次,我说我们在SSM整合中,Spring mvc所创建的IOC容器是子容器,而我们spring的IOC容器呢,它就是负容器。然后所以说它们两个的这个IOC容器是一个父子关系,谁是父,Spring是父,谁是子,Spring VC是子,而它们两个的IOC容器有一个什么样的特点呢?大家注意,子容器中是可以来访问到负容器中的并的,而我们当前咱们的负容器中是没有办法去访问到子容器中的B的,也就是说spring VC的IOC,然后可以来访问到咱们spring的IOC容器中的B,但是spring呢,它的IOC容器中的它的IOC容器是没有办法访问spring VC中的IOC容器中的B的。
15:18
这个大家能听懂吧,来大家注意啊,Spring mvc它的IOC容器,它是子容器,知道不?然后咱们spring它的IOC容器,这是负容器。然后我们当前咱们的子容器能访问到负容器中的病,但是负容器没有办法访问子容器中的病,所以说我们当前你的controller里面要想访问到负容器中的service,可不可以没有任何问题,但是你说。我现在要想通过负容器来访问到子容器中的B行不行?大家听好啊,是不行的。所以说为什么它们两个不是同一个IOC,然后却能访问到这个B呢?大家注意,就是因为这两个IOC容器是有父子关系的,咱们从源码里面咱们就能够看到这样的一句话,虽然说我们没有深入的去看,但是这一句话大家要注意,它就是来为spring mvc的IC容器来设置一个负容器,如果说它要是没有,那就像是我们之前咱们就用了一个spring mvc,你没有用spring,那这个时候,那咱们当前设置负容器,那它就不设置呗,它就来作为级别最高的一个IOC容器,知道吧,就有spring的IOC来作为这个级别最高的一个容器。
16:34
OK吧,但是在我们的spring VC和咱们的spring他们两个来进行整合的时候,然后我们当前所创建的这两个IOC容器,然后谁是子spring VC的IOC容器是子spring的IOC容器是负。它们的规则子容器能访问负容器中的B。而负容器是没有放办法访问子容器中的病的,知道吧,好啊,行,这个大家注意,那我们现在咱们的这个spring的配置文件在什么时候加载,那咱们也已经解决了,那下面呢,我们就可以来玩,那我们下面就可以来这个进行SSM的整合了啊,这个大家注意好。
我来说两句