SpringMVC自动配置

springboot为SpringMVC配置了自动配置,以下是SpringBoot对SpringMVC的默认配置

org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration

自动配置在Spring的默认配置之上添加了以下功能

  • 包含ContentNegotiatingViewResolverBeanNameViewResolver。--> 视图解析器
  • 支持服务静态资源,包括对WebJars的支持(官方文档中有介绍)。--> 静态资源文件夹路径
  • 自动注册ConverterGenericConverterFormatterbeans。--> 转换器,格式化器
  • 支持HttpMessageConverters官方文档中有介绍)。--> SpringMVC用来转换Http请求和响应的;
  • 自动注册MessageCodesResolver官方文档中有介绍)。--> 定义错误代码生成规则
  • 静态index.html支持。--> 静态首页访问
  • 定制Favicon.ioc支持(官方文档中有介绍)。--> 网站图标
  • 自动使用ConfigurableWebBindingInitializerbean(官方文档中有介绍)。

如果您想保留 Spring Boot MVC 的功能,并且需要添加其他 MVC 配置(拦截器,格式化程序和视图控制器等),可以添加自己的 WebMvcConfigurer 类型的 @Configuration 类,但不能带 @EnableWebMvc 注解。如果您想自定义 RequestMappingHandlerMappingRequestMappingHandlerAdapter 或者 ExceptionHandlerExceptionResolver 实例,可以声明一个 WebMvcRegistrationsAdapter 实例来提供这些组件。如果您想完全掌控 Spring MVC,可以添加自定义注解了 @EnableWebMvc 的 @Configuration 配置类。

视图解析器

视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何渲染(转发?重定向?)

  • 自动配置了ViewResolver
  • ContentNegotiatingViewResolver:组合所有的视图解析器的;

转换器/格式化器

  • Converter:转换器; public String hello(User user):类型转换使用Converter(表单数据转为user)
  • Formatter 格式化器; 2017.12.17===Date;
        @Bean
        //在配置文件中配置日期格式化的规则
        @ConditionalOnProperty(prefix = "spring.mvc", name = "date-format")
        public Formatter<Date> dateFormatter() {
            return new DateFormatter(this.mvcProperties.getDateFormat());//日期格式化组件
        }

自己添加的格式化器转换器,我们只需要放在容器中即可

HttpMessageConverters

  • HttpMessageConverter:SpringMVC用来转换Http请求和响应的;User---Json;
  • HttpMessageConverters 是从容器中确定;获取所有的HttpMessageConverter;
  • 自己给容器中添加HttpMessageConverter,只需要将自己的组件注册容器中(@Bean,@Component)

MessageCodesResolver

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

扩展SpringMVC

  • 先前的配置文件的配置
    <mvc:view-controller path="/hello" view-name="success"/>
  • 使用配置类(@Configuration)是WebMvcConfigurer类型,不能标注@EnableWebMvc
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/hi").setViewName("success");
        }
    }

如何修改SpringBoot的默认配置

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

  • 在SpringBoot中会有非常多的xxxConfigurer帮助我们进行扩展配置
  • 在SpringBoot中会有很多的xxxCustomizer帮助我们进行定制配置

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值