1、我们可以去官方文档看看怎么使用:
https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-developing-web-applications.html
2、我们按照他的步骤一步步走,看看是什么原理:
创建一个config文件夹,然后在下面写一个类
MyMvcConfig.java
3、通过ALT+INS我们去看它可以重写什么方法:
4、继续看文档:
5、去代码中CTRL+SHITF+A搜索ContentNegotiatingViewResolver找到这个类:
6、可以看见里面实现ViewResolver接口
再点击进去,就能看见视图解析器接口了:
7、返回ContentNegotiatingViewResolver然后CTRL+F搜索resolveViewName咱们去看一下他是怎么重写的;
8、获得最好的视图?是啥玩意?点进getCandidateViews去看看:
9、原来如此,不就是遍历获取全部视图然后把他们封装起来,既然我们知道了,那我们自己写一个测试一下:
MyMvcConfig.java
package com.wlm.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Locale;
//扩展 SpringMVC
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//public interface ViewResolver 实现了视图解析器接口的类,我们就可以把他看作视图解析器
@Bean
public ViewResolver MyViewResolver(){
return new MyViewResolver();
}
//自定义了一个自己的视图解析器MyViewResolver
public static class MyViewResolver implements ViewResolver{
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
return null;
}
}
}
那我们如何测试呢?我们知道视图都会经过dispatchservlet,我们去那里打个断点看看他是否会经过:
点击DeBug:
点开this:
10、结论:
如果你想diy一些定制化的功能,只要你写这个组件,然后将他交给springboot,springboot就会帮我们自动装配!!!
11、那我们继续,看一下格式化转换器,我们看源码中:
当我们不知道怎么配置就可以点进去mvcProperties看一下:
点击WebMvcProperties找到getDateFormat
这样的话我们就知道怎么改了吧:
12、总结一下:
SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(如果用户自己配置@Bean)、如果有就用用户配置的,如果没有就用自动配置的;如果有些组件可以存在多个,比如我们的视图解析器,就将用户配置的和自己默认的组合起来!
13、我们再来看几个注解:
14、官方没有说不给加上@EnableWebMvc,那我们就要加上会怎么样呢?先看这里源码:
15、点进去有没有发现这个就是我们开始点进去@EnableWebMvc导入的那个DelegatingWebMvcConfiguration类一样的
16、点进去看看呗,(重点)继承了父类WebMvcConfigurationSupport
看完这段代码我们可以认为DelegatingWebMvcConfiguration类就是从容器中获取所有的WebMvcConfigurer
17、再去WebMvcAutoConfiguration.java看看这行代码:
18、点进去@EnableWebMvc
19、再点击DelegatingWebMvcConfiguration
20、说明只要我们加入@EnableWebMvc那么就会继承WebMvcConfigurationSupport,直接导致自动配置失效
总结:
在springboot中,有非常多的xxxx Configuration帮助我们进行扩展配置,只要看见这个东西,我们就要注意了!