spingboot-springmvc自动配置原理

SpringMVC auto-configuration

SpringBoot自动配置好了springMVC,首先要了解boot对mvc自动配置的内容, 先看官方文档:
https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration

  • Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.
    • 自动配置了ViewResolver(视图解析器:根据方法返回值得到视图对象(View),视图对象决定如何渲染(转发,重定向))
    • ContentNegotiatingViewResolver:组合所有视图解析器
    • 如何定制:可以给容器添加一个视图解析器,自动将其组合进来(ContentNegotiatingViewResolver所组合的视图解析器都是从容器中获得的)
  • Support for serving static resources, including support for WebJars (see below).
    静态资源文件夹路径,webjars
  • Automatic registration of Converter, GenericConverter, Formatter beans.
    • Converter:转换器,public String hello(User user):类型转换使用Converter
    • Formatter格式化器;2018.07.27==Date
      • 这个转包含两个方面:一个是把字符串转成日期类型,二是把这种格式转过来,也自动注册了,来看一下源码
@Bean
@Override
      public FormattingConversionService mvcConversionService() {
            WebConversionService conversionService = new WebConversionService(
                    this.mvcProperties.getDateFormat());
                    addFormatters(conversionService);
                    return conversionService;
       }
  • 下面还有一个方法
 @Override
            public void addFormatters(FormatterRegistry registry) {
                for (Converter<?, ?> converter : getBeansOfType(Converter.class)) {
                    registry.addConverter(converter);
                }
                for (GenericConverter converter : getBeansOfType(GenericConverter.class)) {
                        registry.addConverter(converter);
                }
                for (Formatter<?> formatter : getBeansOfType(Formatter.class)) {
                        registry.addFormatter(formatter);
                }
            }
  • 我们来看一下getBeansOfType方法
 private <T> Collection<T> getBeansOfType(Class<T> type) {
                    return this.beanFactory.getBeansOfType(type).values();
            }
  • 是拿到beanFactory,从容器中获取所有类型的convert,然后把他们挨个遍历迁过去,所以如果自己添加的格式化器转化器,只需要放到容器中即可
  • Support for HttpMessageConverters (see below).
    • MessageConverters:SpringMVC用来转换http请求和相应的;eg: 比如一个方法,返回了user,想把它以json数据形式写出去,所以就需要一个, 能把user写出json格式的一个MessageConverter
    • MessageConverters是从容器中确定的;获取所有的HttpMessageConverter;
    • 自己给容器添加HttpMessageConverter,只需要将自己的组件注册到容器中(@Bean@Component)
  • Automatic registration of MessageCodesResolver (see below).
    • 定义错误代码生成规则
  • Static index.html support.

静态资源首页访问
* Custom Favicon support (see below).
favicon.ico
* Automatic use of a ConfigurableWebBindingInitializer bean (see below).
* 我们可以配置一个ConfigurableWebBindingInitializer来替换默认的;(只需要在容器中添加一个我们自定义的转换器即可)

如何修改springboot的默认配置

  • springboot在自动配置很多组件的时候,先看容器中有没有用户自己配置(@Bean @Component)如果有就用用户配置的,如果没有,才自动配置;如果有些组件可以有多个(eg:ViewResolver)将用户配置的和自己默认的组合起来.
  • springboot中有非常多的xxxConfigurer帮助我们进行扩展配置
  • springboot中会有很多的xxxCustomizer帮助我们进行定制配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阳光下是个孩子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值