SpringBoot自动配置MVC原理

SpringBoot自动配置了MVC究竟都配置了那些东西,该如何自定义呢?
摸了!直接看官方文档(其实我也看不大懂英语)

https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot
在这里插入图片描述
写着SpringBoot自动配置了SpringMVC,支持两种视图解析器ContentNegotiatingViewResolver ,
BeanNameViewResolver ,
,巴拉巴拉的

我们去看看他是如何实现ContentNegotiatingViewResolver 的
在这里插入图片描述

他实现了视图解析器接口,接口中就一个方法,看他是怎么重写的在这里插入图片描述
在这里插入图片描述
获取视图解析器列表,找到best视图解析器,并且返回
进入getCandidateViews这个方法看看他是如何获取解析器列表的
在这里插入图片描述
拿到列表,遍历一遍,候选视图加入列表
在这里插入图片描述
返回best视图解析器

然后看这个
If you want to keep those Spring Boot MVC customizations and make more MVC customizations (interceptors, formatters, view controllers, and other features), you can add your own @Configuration class of type WebMvcConfigurer but without @EnableWebMvc.
如果你想保持MVC的默认配置并且添加配置,你就得实现WebMvcConfigurer 并且加上@Configuration但是不能加@EnableWebMvc。试试去
在这里插入图片描述
实现了个视图解析器并且塞进了bean,直接去DispatchServlet打个断点看下
在这里插入图片描述
在这里插入图片描述
可以看到前两个是他自带的视图解析器,第三个是模板自带的(这就是为啥添加模板后直接返回值就行了,默认会给到模板的解析器然后解析输出),第四个就是我们写的。完成了自定义配置

皮一下,官方文档说不能加@EnableWebMvc
我不!
在这里插入图片描述
这个注解里面只是引入了一个配置类
我们回到DispatchServlet去看看发生了什么

在这里插入图片描述

你会发现他默认配置的解析器飞了。所以是怎么做到的呢?回到WebMvcAutoConfiguration去看下源码(因为那个Boot默认的视图解析器是在这里面创建的)
在这里插入图片描述
这个注解就是当WebMvcConfigurationSupport这个Bean存在的时候这个类就失效了我们打开之前那个
@EnableWebMvc注解看下里面导入的是什么
在这里插入图片描述
导入的这个类继承了WebMvcConfigurationSupport所以默认配置失效,所以官方文档不让你加这个注解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值