博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot的MVC自动配置
阅读量:3925 次
发布时间:2019-05-23

本文共 1907 字,大约阅读时间需要 6 分钟。

文章目录

springboot为我们提供了springmvc的自动配置,所以我们可以直接编写逻辑就能实现功能。(如下内容都是基于springboot2.2.5)

比如万能的helloworld:

在这里插入图片描述
我们只要写一个controller就能自动映射到。

访问localhost:8080/hello,如下

在这里插入图片描述
那么springboot是如何帮助我们自动配置的呢?

springboot对mvc的自动配置

对于springmvc的自动配置全部在WebMvcAutoConfiguration.class类中。

ctrl+n搜索类,进入:

在这里插入图片描述

对静态资源的自动配置

看到如下关键方法:

在这里插入图片描述

webjars

首先webjars是什么呢?

看官网的描述:
在这里插入图片描述
其实说白了,就是讲静态资源通过jar包的方式导入进来。

那么我们看看springboot是如何配置webjars的。

if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/") .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl)); }

关于webjars,会自动帮我们添加一个映射。对于/webjars/**这样的资源回去类路径下的?META-INF/resources/webjars/路径下面去找。

在这里插入图片描述并且可以设置缓存时间,而缓存时间是从ResourceProperties下面去找的。
在这里插入图片描述
关于ResourcesProperties我们可以从配置文件的spring.resources前缀的属性注入进来。

这样在浏览器访问localhost:8080/webjars/**这个路径就会通过根路径的respurces/webjars/**这个路径来寻找。

比如:我们导入jquery的一个jar包:
在这里插入图片描述
只要导入进来,我们就可以通过访问localhost:8080/webjars/jquery/3.3.1/jquery.js来访问了,如下图所示:
在这里插入图片描述

静态资源的位置配置

那么我们编写的静态资源应该放到哪里才可以被访问到呢,比如下面的ilogin.html

在这里插入图片描述

再来看springboot的自动配置:

在这里插入图片描述
那我们点进去看一下这是给我们配置到哪里去了呢?
在这里插入图片描述
经过一路跟踪,终于找到,springboot为我们自动配置的静态资源位置是如下几个:classpath:/MATA-INF/resources/、classpath:/resources/、classpath:/public/、classpath:/static/这几个位置,无论我们把静态资源放到这几个的哪一个都可以访问到:
在这里插入图片描述
通过测试abcd四个html都能被访问到。

欢迎页的配置

对于欢迎页的配置,springboot又是如何自动配置的呢?

还是进入WebMvcAutoConfiguration.class这个类:
在这里插入图片描述
进入这个构造方法里边,
在这里插入图片描述
在这里插入图片描述
观察这个类的注释:支持静态资源和模板文件,但是更喜欢静态资源。

也就是我们无论是吧index.html页面放到静态资源文件夹下,还是放在templates文件夹下都可以被访问到,但是如果两个路径下都包括index.html,那么优先加载静态资源下的index。

全面接管springmvc

如何全面接管springmvc呢,我们只要在一个组件上面加上@EnableWebMvc注解就行。

这样springboot为我们做的mvc自动配置全部都会失效,只会保留最初始的功能。

如下所示:
在这里插入图片描述
这样如果我们在访问webjars,比如:http://localhost:8080/webjars/jquery/3.3.1/jquery.js
在这里插入图片描述
就不能访问到了。

为什么只要添加一个注解就不能访问到了呢?

可以进这个注解看一下:
在这里插入图片描述
这个注解很简单,就是向容器中导入了一个组件,那我们点进去看一下:
在这里插入图片描述
我们可以看到这个类继承了WrbConfigurationSupport这个类,再看看mvc的自动配置类:
在这里插入图片描述
mvc的自动配置类会判断在没有这个组件的情况下,才会生效

也就是说我们使用了这个@EnableWebMvc注解,就会使springboot自动配置的mvc失效。

转载地址:http://lmqrn.baihongyu.com/

你可能感兴趣的文章
五年了,别再把务虚会开 “虚” 了
查看>>
一文看懂"async"和“await”关键词是如何简化了C#中多线程的开发过程
查看>>
每天都在支付,你真的了解信息流和资金流?
查看>>
.Net Core 自定义配置源从配置中心读取配置
查看>>
设计模式之享元模式
查看>>
单例模式最佳实践
查看>>
.NET Core + Spring Cloud:服务注册与发现
查看>>
今天你内卷了吗?
查看>>
设计模式之代理模式
查看>>
结构型设计模式总结
查看>>
dotNET:怎样处理程序中的异常(实战篇)?
查看>>
What is 测试金字塔?
查看>>
.Net Core HttpClient处理响应压缩
查看>>
十分钟搭建自己的私有NuGet服务器-BaGet
查看>>
efcore 新特性 SaveChanges Events
查看>>
龙芯3A5000初样顺利交付流片
查看>>
用了Dapper之后通篇还是SqlConnection,真的看不下去了
查看>>
ABP快速开发一个.NET Core电商平台
查看>>
[NewLife.Net]单机400万长连接压力测试
查看>>
使用Azure人脸API对图片进行人脸识别
查看>>