【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注解

posted @ 2022-08-14 19:00  王广元  阅读(76)  评论(0编辑  收藏  举报
分享到: