springboot的MVC自动配置

2023-01-13 11:59:25

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失效。

  • 作者:youngyang的博客
  • 原文链接:https://blog.csdn.net/qq_42013590/article/details/104879704
    更新时间:2023-01-13 11:59:25