SpringBoot之MVC配置原理

1. MVC配置原理

途径:
1. 阅读源码
2. 官方文档

官方文档:https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration

1.1 分析MVC自动配置原理

看看如何自动配置的
找到我们熟悉的视图解析器,点击查看ViewResolver
在这里插入图片描述
发现是一个接口,该方法是用来解析视图的,我们看下它的实现类
在这里插入图片描述
发现它的有几个实现类,点击第三看看
在这里插入图片描述
getCandidateViews()方法是获取所有的候选视图,该方法里面是循环所有的视图解析器,然后通过视图解析器去获取所有视图并添加到视图候选区;
getBestView()是从候选区中获取最好的视图,最后返回最好的视图,接下来实现自定义视图解析器。
在这里插入图片描述

ContentNegotiatingViewResolver类是springboot自动装配的视图解析器,而且该类实现视图解析器的接口,所以关键是视图解析器的接口
在这里插入图片描述

2. 自定义MVC配置

如果您希望保留Spring Boot MVC功能,并且希望添加其他MVC配置(拦截器、格式化程序、视图控制器和其他功能),则可以添加自己的@configuration类,类型为webmvcconfiguer,但不添加@EnableWebMvc。如果希望提供RequestMappingHandlerMappingRequestMappingHandlerAdapterExceptionHandlerExceptionResolver的自定义实例,则可以声明WebMVCregistrationAdapter实例来提供此类组件。

2.1 自定义MVC配置

自定义的mvc类步骤:
1. 建立一个类配置@Configuration
2. 实现WebMvcConfigurer接口
3. 定义内部类实现ViewResolver接口,重写

我们自己定义一个MVC配置

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

	@Bean //放到bean中
	public ViewResolver myViewResolver(){
	   return new MyViewResolver();
	}

    public static class MyViewResolver implements ViewResolver{

        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            //写我们需要的逻辑
            return null;
        }
    }
}

2.3 测试MVC配置类

因为请求过程都会经过DispatcherServlet类中doDispatch方法
在这里插入图片描述
成功装配上!
在这里插入图片描述

3. SpringMVC扩展

在这里插入图片描述
SpringMVC自动配置
Spring Boot为Spring MVC提供了自动配置,它可以很好地与大多数应用程序一起工作。

自动配置在Spring默认设置的基础上添加了以下功能:

  • 包含视图解析器
  • 支持静态资源文件夹的路径,以及webjars
  • 自动注册了Converter转换器,这就是我们网页提交数据到后台自动封装成为对象的东西
  • HttpMessageConverters,比如我们要把一个User对象转换为JSON字符串
  • 定义错误代码生成规则的
  • 首页定制
  • 图标定制
  • 初始化数据绑定器:帮我们把请求数据绑定到JavaBean中!

3.1 实现步骤

实现步骤:

  1. 建立配置类添加@Configuration
  2. 实现WebMvcConfigurer重现相应的方法;

我们先看实例

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    //视图跳转
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //返回/abc会跳转到test.html
        registry.addViewController("/abc").setViewName("test");
    }
}

3.2 分析原理

我们可以去分析一下原理:

1、WebMvcAutoConfiguration 是 SpringMVC的自动配置类,里面有一个类WebMvcAutoConfigurationAdapter

2、这个类上有一个注解,在做其他自动配置时会导入:@Import(EnableWebMvcConfiguration.class)
在这里插入图片描述
3、我们点进EnableWebMvcConfiguration这个类看一下,它继承了一个父类:DelegatingWebMvcConfiguration
在这里插入图片描述
这个父类中有这样一段代码:
在这里插入图片描述
4、我们可以在这个类中去寻找一个我们刚才设置的viewController当做参考,发现它调用了一个
在这里插入图片描述
5、我们点进去看一下

在这里插入图片描述
在这里插入图片描述

4. 完全控制MVC配置

4.1 @EnableWebMvc

如果您想完全控制Spring MVC,可以添加自己的@Configuration,并用@EnableWebMvc进行注释。
用@EnableWebMvc注解,我们之前的配置的东西就会失效。比如定制首页失效。

4.2 分析原理

1.我们点击EnableWebMvc注解
在这里插入图片描述
2.我们点击DelegatingWebMvcConfiguration.class
DelegatingWebMvcConfiguration类看起来是不是很熟悉
继续WebMvcConfigurationSupport父类
在这里插入图片描述
3.
在这里插入图片描述总结:
添加了@EnableWebMvc注解就相当于添加了WebMvcConfigurationSupport类,而mvc自动配置的类启动条件@ConditionalOnMissingBean中,是规定不能存在WebMvcConfigurationSupport类,存在则webMvc自动配置类失效。

内容参考:https://www.bilibili.com/video/BV1PE411i7CV
仅用于学习!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值