【SpringBoot】学习笔记-MVC

ContentNegotiatingViewResolver
自动配置了ViewResolver,就是我们之前学习的SpringMVC的视图解析器;
即根据方法的返回值取得视图对象(View),然后由视图对象决定如何渲染(转发,重定向)。
我们去看看这里的源码:我们找到 WebMvcAutoConfiguration , 然后搜索ContentNegotiatingViewResolver。找到如下方法!
我们可以点击这个类,发现这个类的代码:(发现这个视图解析器实现了 ViewResolver接口)
所以得出结论:ContentNegotiatingViewResolver 这个视图解析器就是用来组合所有的视图解析器的,然后返回所有合适的解析视图,然后返回一个最佳试视图
我们发现它是在容器中去找视图解析器,我们是否可以猜想,我们就可以去实现一个视图解析器了呢?
我们可以自己给容器中去添加一个视图解析器;这个类就会帮我们自动的将它组合进来;我们去实现一下
1、我们在我们的主程序中去写一个视图解析器来试试;
2、怎么看我们自己写的视图解析器有没有起作用呢?
我们给 DispatcherServlet 中的 doDispatch方法 加个断点进行调试一下,因为所有的请求都会走到这个方法中
找到视图解析器,我们看到我们自己定义的就在这里了;
所以说,我们如果想要使用自己定制化的东西,我们只需要给容器中添加这个组件就好了!剩下的事情SpringBoot就会帮我们做了!
定制化WebMvcConfigurer不要使用@EnableWebMvc注解?
我们点击@EnableWebMvc,发现它引入了DelegatingWebMvcConfiguration这个类
我们点击DelegatingWebMvcConfiguration这个类,查看其定
这里 我们发现,DelegatingWebMvcConfiguration这个类继承了WebMvcConfigurationSupport类,也就是说它是WebMvcConfigurationSupport类
的子类,这是一个关键点,让我们记住它。
接下来 我们把目光放回WebMvcAutoConfiguration WebMvc自动配置的类
我们发现他有一个注解,@ConditionalOnMissingBean(WebMvcConfigurationSupport.class),也就是说自动装配失效的前提条件就是不存在
WebMvcConfigurationSupport组件,而如果我们在自定义WebMvcConfigurer配置类时如果引入了@EnableWebMVC,就会导致SpringBoot原有的
WebMvcAutoConfiguration配置失效。
综上:
正如 SpringBoot官方文档所说的那样,如果我们想在SpringBoot原有的Mvc配置上做更多个个性化配置,那么就不要在WebMvcConfigurer配置类添加
@EnableWebMVC注解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现