SpringBoot之----源码探究如何装配扩展SpringMVC

SpringBoot之----源码探究如何装配扩展SpringMVC,第1张

SpringBoot之----源码探究如何装配扩展SpringMVC

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帮助我们进行扩展配置,只要看见这个东西,我们就要注意了!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5608031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存