博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot_05 SpringBoot中的SpringMVC
阅读量:3966 次
发布时间:2019-05-24

本文共 2402 字,大约阅读时间需要 8 分钟。

SpringBoot中的SpringMVC


本人是个新手,写下博客用于自我复习、自我总结。

如有错误之处,请各位大佬指出。
学习资料来源于:尚硅谷


SpringMVC自动配置

参考官网文档

在这里插入图片描述
SpringBoot自动配置好了SpringMVC
以下是SpringBoot对SpringMVC的默认:
(1)自动配置了ViewResolver(视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何渲染(转发?重定向?))
(2)ContentNegotiatingViewResolver:当我们自己给容器中添加一个视图解析器时,它就会来自动的组合所有的视图解析器。

@Bean    public ViewResolver myViewResolver(){
return new MyViewResolver(); } private static class MyViewResolver implements ViewResolver{
@Override public View resolveViewName(String s, Locale locale) throws Exception {
return null; } }

(3)自动注册了Converter,Formatter,GenericConverter

Converter:转换器;public String hello(User user) ; 类型转换使用Converter
Formatter:格式化器; 比如将2020-2-12日期转换成Date类型。
自己添加的格式化器转换器,我们只需要放在容器中即可。

(4)HttpMessageConverter:SpringMVC用来转换Http请求和响应的;

HttpMessageConverters是从容器中确定的,它会获取所有的HttpMessageConverter。
自己给容器中添加HttpMessageConverter,只需要将自己的组件注册容器中。

(5)我们可以配置一个ConfigurableWebBindingInitializer来替换默认的。(添加到容器)

通过以上,就可以知道如何修改SpringBoot的默认配置。

SpringBoot在自动配置很多组件的时候,先看容器中用户有没有自己配置的(@Bean、@Component)。如果有,就用用户配置的。如果没有,才自动配置。如果有些组件可以有多个(ViewResolver),它会将用户配置的和自己默认的组合起来。

扩展SpringMVC

原来的:

扩展方法:编写一个配置类(@Configuration),是WebMvcConfigurerAdapter类型;不能标注@EnableWebMvc。

//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能@Configurationpublic class MyMvcConfig extends WebMvcConfigurerAdapter {
@Override public void addViewControllers(ViewControllerRegistry registry) {
//super.addViewControllers(registry); //效果:浏览器发送 /guigu 请求来到 success registry.addViewController("/guigu").setViewName("success"); }}

既保留了所有的自动配置,也能用我们扩展的配置。

原理:

1)、WebMvcAutoConfiguration是SpringMVC的自动配置类

2)、在做其他自动配置时会导入:@Import(EnableWebMvcConfiguration.class)
3)、容器中所有的WebMvcConfigurer都会一起起作用,我们的配置类也会被调用。

效果:SpringMVC的自动配置和我们的扩展配置都会起作用。

为什么不能标注@EnableWebMvc?

这个注解一旦使用,就意味着SpringBoot对SpringMVC的自动配置就不需要了,所有的都需要我们自己配。显然,这个功能不建议使用。

为什么一使用这个注解就会出现这个情况?

1)@EnableWebMvc的核心是:

@Import(DelegatingWebMvcConfiguraion.class)public @interface EnableWebMvc {

2)然后:

@Configurationpublic class DelegatingWebMvcConfiguraion extends WebMvcConfiguraionSupport{

3)然后WebMvcAutoConfiguraion中是这样的:

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)public class WebMvcAutoConfiguration{

也就是说,当容器中没有这个WebMvcConfigurationSupport组件时,这个自动配置类才会生效,而EnableWebMvc帮我们把这个导入进来了,所以就会失效。

转载地址:http://nayki.baihongyu.com/

你可能感兴趣的文章
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>
Go在windows下执行命令行指令
查看>>
inotify
查看>>
inode
查看>>
Shell: sh,bash,csh,tcsh等shell的区别
查看>>
golang ubuntu 配置 笔记
查看>>
vim 常用命令
查看>>
golang 开源项目
查看>>
ubntu 开发服务进程
查看>>
linux 常用命令以及技巧
查看>>
记录1年免费亚马逊AWS云服务器申请方法过程及使用技巧
查看>>
golang文章
查看>>
linux的system () 函数详解
查看>>
在shell脚本的第一行中,必须写#!/bin/bash
查看>>
一句话##错误 'ASP 0116' 丢失脚本关闭分隔符
查看>>