00:00
好,前面呢,我们分析了一下spring boot对spring VC自动配置的一些功能,但实际在开发过程中,仅靠spring BOO的这点自动配置那是不够用的,比如我来举一个例子,我们以前有spring MC配置文件的时候,哎,我假设呢,我在这new,我来创建一个的配置文件,那么就叫spring mvc,我们有spring mvc配置文件的时候呢,大家可能写过这些标签,比如MVC,我又controltr视图映射,比如呢,我把hello请求,发hello请求的时候也返回到哪个视图呢?也返回到success,这样解析器也会帮我们来回到success页面,包括呢,大家也写过mvccept啊,这是我们来定义spring m VC的拦截器,哎,拦截器,比如我来拦什么请求,我就来拦hello请求,然后呢,是哪个拦截器呢?我们用B来标识上。
01:00
这都是我们以前啊,大家经常做的这些配置,但没了这个配置文件,那这个功能能不能做啊,啊,我们spring布它也提供了扩展,怎么扩展呢?好,我把这段复制过来,假设呢,我们现在想要完成这个功能,那想要扩展spring mvc,还是看我们前面复制完的这段话,我们没翻译完的,这有一个,如果我们想要保持spring BOO对spring m VC自动配置的这些功能,而且呢,我们只是想给里边额外的添加一些功能,比如什么我们这些intercept或者无忧control,我们可以干嘛呢?我们可以。我们可以添加一个我们自己的叫configuration类,所以说呢,我们要做的就是编写一个配置类,这个配置类呢,就是用configuration注解来标注的这个类。哎,这个类呢,才能成为配置类,我来编写一个配置类,然后呢,但是注意啊,这个配置的类的类型是web mvc分adapt,嗯,相当于是这个类型的,而且你看啊,他还说without en web MC说我们不能标。
02:20
Web mvc注解,那这个呢,就是我们来想要扩展的话,那就这么来扩展,那我来给大家举一个例子,看一下想要实现我们刚才的这个功能行不行呢?好,我们就来给它扩展一下,我们呢自己在这儿我来写一个配置类,我把所有的配置类呢,我都放在conf下,比如呢,就叫my mvc config,好,然后呢,首先呢,说得用conig来标注,这是一个配置类,而且呢得是叫web mvc confi adapt是这个类型,那好,这是一个抽象类,我们就来继承它就行了,继承咱们这个web mvc,把这个包导进来,好,那继承它有什么用呢?我们点进来看一下。
03:15
我们看啊,这个里边呢,有非常多的这些空方法,哎,这些空方法,这空方法呢,其实是来源于这个接口的,这个接口呢,就是我们spring m VC的扩展配置都在这里边,而我们要实现接口太麻烦了,所以说它给我们一个适配器,这有空方法,我们要做什么功能,我们就在这配置,比如我们要做异步支持的,这有配异步的,包括呢,这有配default so handing的,啊这就是我们以前写的这个标签的功能,Mvc defult handle就是我们写的这个功能,包括呢,我们看下边的有添加的,诶还有什么添加ceptcept不就是这个功能吗?还有我们这个添加resource handle,哎,给我们这个资源里边进行注册的,我们静态资源,之前的静态资源映射规则就是拿它做的,包括呢,我们来看这有什么cross mapping来配置跨域的等等。往下翻,我又。
04:15
出了,哎这都有,所以呢,我们以后啊就来用它就行了,我们使用咱们web mvc adapt可以来扩展。扩展spring mvc的功能。那怎么扩展呢?有那么多方法,我们就来重写,要什么功能来重写什么方法就行了,CTRL加O,打开它的这个方法可以重写的列表,比如呢,我们要添加一个视图映射,哎,我们就来用这个无u ctrl为例,把它添进来,剩下的呢都一样,那怎么办呢?哎,我这有一个叫GRYGRY,里边呢有一个叫添加5UCTR,设置一个视图映射规则,首先呢是URL pass,哎,你要把什么请求映射到什么页面,比如呢,我们把按硅谷请求,也就说我们这个浏览器方案的硅谷去哪个页面呢?可以继续点一下,诶这继续面试调用set name,我要去哪个页面,我写一个success,那这个页面呢,当然也是由我们模板引擎的视图解析器来进行解析的啊,那么它的效果呢,就是我们浏览器发送。
05:33
嗯。浏览器发送,发送咱们这个硅谷请求。按照归故请求,然后呢也来到成功页面,也来到咱们这个呢,Success页面,这样呢,我们只是想发一个请求来页面,就没必要像hello一样,我们发一个请求来页面,只要不放数据就没必要写这些空方法了,我们直接来做视图映射来测一测行不行呢?我来启动起来。
06:04
我们看一下来发at硅谷请求啊,能不能来到success页面,首先我们看下边,哎,下边这呢有map your pass at硅谷控制台上,At硅谷已经映射过来了,那我们就来访问at硅谷请求回车,诶,我们发现确实呢来到成功页面了,只不过我们没放什么数据,这里边就没什么东西,所以呢,我们要扩展spring mvc,我们就这么来用。注意这个呢是扩展spring m VC,它的这个特点呢,就是既保留了spring BOO为我们的自动配置,既保留了啊所有的自动配置也也能用,也能用我们扩展的配置,那么这个原理是什么呢?我们也可以来带大家大概的看一看,那么还是来到我们这个外BMVC自动配置中啊,我们还是观察它web mvc是咱们这个spring mvc啊自动配置类这是第一个,然后呢,第二个我们来看,主要在这个web mvc自动配置中呢啊,除过它填其他组件外,这呢还有一个叫web mvc的这个自动配置,你看啊,它也是继承谁啊继承我们这个web mvc,它也是利用我们这个机制,你看重写adapt。
07:35
供的这些方法,然后呢,把这个组件填进去,包括我们之前看的,诶你看我们往下翻,我们之前的这个静态资源映射,就是呢,调的adapt的,咱们这个and resource handler方法,把web之类的都映射过来,当然我们看这个类目的不是分析它,主要是这个类上边注意有一个叫importable web mvc confi,然后呢,我们在配置的时候呢,再做,再做其他自动配置时会导入。
08:13
会导入个什么呢?导入一个叫a web mvc con,那我说他的目的是干什么呢?来看一下它。这a web mvfigu我来点一下,诶还在web mvc自动配置类,它呢是继承了daily gettingb mcfiration,它呢也是一个这个配呢,给里边添加了什么request handle以及handle等等,好,我们呢就把它拿来。这个类的描述是这个样子的。好,我们把这段描述拿来,而这段描述里边重要的是什么呢?我们来看啊,我们重要的是它的继承的这个父类,在这个副类里边呢,有这么一段话,我把这一段话呢复制过来,这段话的作用是什么?我来给大家看owa,这是不是叫自动装配啊,自动装配什么呢?哎,自动装配一旦标在我们这个方法上,方法的参数就要从容器中获取,那相当于这句话的作用,就是说从容器中获取,获取什么获取你看啊,这是个list,所有的web MC con,获取所有的web mvc con,然后呢,把这些con,诶,复制到我们这个con里边,复制到这有啥用啊,能注意我们来注意,然后呢,在这个里边有我们的这些配置,哎,有我们a adapt里边啊,之前做的这些配置,只不过这些配。
09:51
是,大家注意啊,每一个都是调con的这个方法,比如我们来填视图映射,哎,我又CTR了,它呢调的是con and view controltr,哎,我呢就以一个为例,我点进去给大家看,你看它是什么,其实呢,它是把所有我们容器中的web m VC con都拿来,把他们的and view control方法都调一遍,好,我们把它复制过来。
10:17
这个comp呢,也是我们这个web MC,就是在我们这个ATE里边的,保存我们con类的这个东西好。我们呢,现在它的一个实现,一个参考实现。要配置呢,它是这样子的。他是把这些他呢是把这些拿来,诶把这些拿来呢,我把这个助掉,哎,因为它不是这个方法里边的啊,你看啊,它是拿到所有的con菲给我们来把这个配置都调一遍,它的作用就是将所有的。
11:01
Web mvc、抗菲格相关的配置。相关的配置都调用一下,那这样的话呢,都来一起调用,一起调用就相当于是一起起作用,不只是所boot给我们的配置起作用,那我们的配置类呢,你看啊,也就说第二句话的核心目的就是呢,核心目的就在这所有的容器中,容器中所有的web mvc都会一起来起作用。都会一起。一起起作用,这一起起作用呢,那就包括我们是不是自己写的啊,哎,我们自己写的这个配置类,它不就继承了这个con菲adapter吗?这个adapter就是我们那个con菲的一个实现,所以呢,我们的配置类,我们的配置类也会被调用,而被调用呢,实现的效果是什么啊,效果就是你看啊,首先呢,是我们spring m VC自个的自动配置,在这起作用的时候,把我们的顺便也召唤进来了,通过这种方式,也就是说spring mvcvc自动。
12:27
自动配置的自动配置和我们的扩展配置都会起作用。诶,这个呢,就是我们说的,哎,我们如何扩展MC,我们写一个它就行了,大家注意啊,人家说了不能标注enableb MC,那标了它有啥特点呢?又看这句话,当如果我们想完全的咱们这个掌控spring MC,我们需要给我们配置类上填一个什么注解,叫enable web MC,所以说我们这个注解的作用就是我要说的第三个全面接管。
13:08
MVC所谓的全面接管C就是对VC的自动配置,我们不要了的自动配置不要了。不需要,然后呢,所有的都是我们自己配,所有都是我们自己配。这个就类似于什么呢?类似于我们以前你来开发三大框架整合的时候,刚把spring mvc配进来,就是那个时候是什么样子就是什么样子,我们该要写什么,在配置文件里边该要写什么,我就来继续自己来写就行了,所有都是我们自己配,只需要干什么呢?只需要加一个enable web mvc,它这个效果呢,就是我们需要。在咱们这个配置。配置类中添加enable web MC即可,那我们就来添一下,看一下它的这个效果是什么好,我呢给我们的这个配置中,我来填一个叫web mvc,我们把它一填上以后呢,我来重新启动。
14:18
重新启动,重新启动的效果是什么呢?我们现在全面接管了MC,既然全面接管了,那相当于spring mvc以前的这个自动配置,我们说它是不是给失效了,那既然要失效了,我就来测几个,测几个什么呢?我们来看一下啊,首先你看啊,如果自动配置生效,我们这个会配两个filter,这是支持rest风格,以及aja put数据带不上来的,但是我们看控制。控制台在启动的时候,我们来看这个打印,这个打印呢,这一块没有见到相应的菲,而如果说我把这个注解注掉。
15:01
我再来启动。我们不全面接管。哎,我们发现这个控制台,你看这个控制台,这个控制台呢,会打我们这个,就说呢,我们这个写过来了,包括我们来再来测一下,我把这个注解开启,然后呢,我们全面接管了,全面接管就是说我们spring m VC,哎里边spring boot对它的自动配置失效,自动配置失效最典型的我们来测一下,就是我们这些静态资源,Web请求,或者我们这个静态资源,这些静态页面应该不能访问了,哎,如果说我现在先不配它,我们的这个静态页面肯定是能访问的,我们先来访问一下,看我们这个静态页面,包括我们这个web JA能不能访问,我呢,就直接访问index页面。好,我们什么都不访问,来直接访问in首页,诶没问题,但是说如果说我来加上了我的这个enable主体全面接管,全面接管呢,我们的这个静态资源映射失效,我来启动一下。
16:12
看能不能访问首页以及web请求呢?来访问一下回车,哎,我们发现现在就404了,比如呢,我们boot对我们提供的所有自动配置都失效,哎。这个效果就是所有的自动配置失效。所有的自动配置都失效了,当然这是web模块,所有的web模块web场景的,咱们这自动。应该严格来说是所有的spring mvc的咱们这个自动配置都失效,连我们这个静态资源我们都没法用了,哎,我们在为中加一个它就行了,那最终全面接管,哎,我们就用这个样子,当然我们后来开发不推荐大家来全面接管,因为全如果说我们只是做一些简单的功能,用不到那么强大的,我们可以用全面接管,还能省一下我们这个内存空间,少配一些组件,但是呢,我们往往都是需要用非常多的功能的,所以说我们就让它自动配置,而这个原理是什么呢?我们也也来简单给大家看一下,为什么我们写了一个它自动配置就失效了,为什么加了一个a web mvc自动配置就失效了。
17:41
哎,非常简单,来看一下啊,Web mvc注解的核心在这,这个注解的核心呢,就是导入一个它。我们来看。我来把这段代码我来放在这儿。好,Web mvc啊核心核心呢就是帮我们来导入一个ating web mvc configuration这个东西呢,我点进来,诶它其实就是我们刚才又看到那个外版MVC菲的组合逻辑,包括它的副类点进来,这个副类呢,就是我们spring VC里边,它帮我们做一些基本配置,比如request map handle map等等,这副类呢我们就不看了,那么看它有什么用呢?我要把这个拿来,我复制过来。
18:32
哎,我说呢,大家分析上了这个类。那么分析上它它为什么又把自动配置给整失效了呢?那你再来回头来回头再来看一下自动配置web mvc configuration,我们来找一下web mvc configuration,我来看这个自动配置类,它的签名是这样子的。
19:00
啊,自动配置类签名是这样子,我们来进来,在签名里边呢,有一个非常重要的一句话在这儿condition啊,Miss being,啥叫啊Miss being啊,就是呢,判断容器中,容器中没有这个组件的时候,接下来的自动配置类里面的所有功能才效自动配置这个自动配置类,这个自动配置类才生效。那你既然说容器中没有这个web,而我们刚才web MC给我们容器中导了一个这个组件,而这个组件正是web MC。也就是说一。这个MVC帮我们把这个组件导进来了,所以说呢,自动配置类判断失效了,接下来全部都由我们配置了。
20:02
它是将我们这个叫web mvc confiration support,哎,组件导入进来了,导入进来了,而导入进来的这个组件,导入进来的这个组件只是spring mvc的基本功能。来说一下导入的。导入的它只是spring mvc最基本的功能,那像那些视视图显析器啦,包括我们这个5u ctrl啦,包括我们这个啊拦截器啦等等,我们都需要自己再来配置一下,好,这就是我们为什么能用一个MC。当然从这个呢,我们更希望大家来吸取一种模式,我们如何改boot里边的配置呢?未来在boot里边又会有非常多的类似的这些什么什么con加N来搜索一下,你看有异步的con支持,包括缓存的这些con,这con呢就是帮助我们进行配置扩展的。然后呢,未来在中。
21:18
只要我们见到这些都要多留心,会有会有非常多的咱们就什么什么抗飞啊,什么什么抗飞盖,然后呢,帮助我们进行扩展配置,帮助我们进行扩展配置,然后呢,只要遇见他们了。大家呢,都多留心。
我来说两句