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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼_翻身

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值