spring boot 理解

spring boot 采用了自动转配的模式, 在使用了@configration 的内部使用了@bean  注册某些bean, 也可以继承WebMvcConfigurerAdapter 等一些spring 自动装配的父类来编写自己相应的类

spring 启动后关键的一部是加载用户自己转配的bean 采用的方法是:

org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.requestMappingHandlerAdapter()

 HTML Code 
1
2
3
4
5
6
7
8
9
10
而调用这个方法的类为:
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration.EnableWebMvcConfiguration.requestMappingHandlerAdapter()
自动转配的加载

MessageConverter就是这个时候初始化,添加到Adapter 里面去的其中就包括系统自带的conver已经加入Jackson包之后,会加入MappingJackson2HttpMessageConverter
org.springframework.http.converter.ByteArrayHttpMessageConverter@963ba3, org.springframework.http.converter.StringHttpMessageConverter@942f41, org.springframework.http.converter.StringHttpMessageConverter@4c0d7a, org.springframework.http.converter.ResourceHttpMessageConverter@119ae9a, org.springframework.http.converter.xml.SourceHttpMessageConverter@32af73, org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@168dcb5,org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@fe036b, org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@1bd3f7f, org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@1a82bac

这些是所有的转换器

spring boot 源码是不是有问题:重复了两个转换器???


 Java Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter()
{
    RequestMappingHandlerAdapter adapter = createRequestMappingHandlerAdapter();
    adapter.setContentNegotiationManager(mvcContentNegotiationManager());
    adapter.setMessageConverters(getMessageConverters());
    adapter.setWebBindingInitializer(getConfigurableWebBindingInitializer());
    adapter.setCustomArgumentResolvers(getArgumentResolvers());
    adapter.setCustomReturnValueHandlers(getReturnValueHandlers());

     if (jackson2Present)
    {
        adapter.setRequestBodyAdvice(
            Collections.<RequestBodyAdvice>singletonList( new JsonViewRequestBodyAdvice()));
        adapter.setResponseBodyAdvice(
            Collections.<ResponseBodyAdvice<?>>singletonList( new JsonViewResponseBodyAdvice()));
    }

    AsyncSupportConfigurer configurer =  new AsyncSupportConfigurer();
    configureAsyncSupport(configurer);
     if (configurer.getTaskExecutor() != null)
    {
        adapter.setTaskExecutor(configurer.getTaskExecutor());
    }
     if (configurer.getTimeout() != null)
    {
        adapter.setAsyncRequestTimeout(configurer.getTimeout());
    }
    adapter.setCallableInterceptors(configurer.getCallableInterceptors());
    adapter.setDeferredResultInterceptors(configurer.getDeferredResultInterceptors());

     return adapter;
}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值