美文网首页
SpringBoot定义HttpMessageConverter

SpringBoot定义HttpMessageConverter

作者: 骑驴追地瓜 | 来源:发表于2018-10-29 21:52 被阅读0次

    1.HttpMessageConverter的作用

    其实通过名字就可以大概猜个七七八八,就是SpringMvc在接或传Http消息的一个转换器,通俗的理解一下。
    转换流程如下图:


    image.png

    2.如何定义HttpMessageConverter

    Spring官网给出两种定义方式
    ①xml方式

    image.png
    ②configuration 方式
    image.png

    3.@EnableWebMvc

    在用configuration 方式自定义HttpMessageConverter看到了官方的例子,说需要添加一个@EnableWebMvc的注解,那究竟要不要添加呢,这个注解是做什么的呢,笔者在这个注解上耽误了一些时间,下面我将娓娓道来。
    ①@EnableWebMvc注解的作用
    上图:


    image.png

    EnableWebMvc引入了DelegatingWebMvcConfiguration,DelegatingWebMvcConfiguration继承了WebMvcConfigurationSupport,ok不要怕,记住WebMvcConfigurationSupport就够了,记住WebMvcConfigurationSupport,记住WebMvcConfigurationSupport重要的事说三遍。
    简单说EnableWebMvc的作用就是实例化了一个WebMvcConfigurationSupport

    ②如果不加EnableWebMvc,谁会去实例化WebMvcConfigurationSupport
    请看WebMvcAutoConfiguration


    image.png

    ok,不用往下看就知道了WebMvcAutoConfiguration肯定实例化WebMvcConfigurationSupport,就因为红线那句话,当缺少WebMvcConfigurationSupport的bean的时候,这个自动配置才会执行

    那么看到这里大家是不是已经知道答案了,当你的模块使用了@EnableWebMvc,那你将失去springBoot的自动配置,那如果使用@EnableWebMvc会发生什么呢?
    看下图:


    image.png

    又见老大哥,在重要的事情强调三遍的时候我们知道老大哥继承了WebMvcConfigurationSupport,然后如图:


    image.png
    没错老大哥把所有散落在外的实现了WebMvcConfigurer接口的bean都加载进来了,为啥要加载,肯定是为了覆盖默认配置呀,所以说如果不使用@EnableWebMvc,那么只要实现了WebMvcConfigurer,你的配置会覆盖SpringBoot的默认配置,如果使用了@EnableWebMvc那么这个世界只有你的配置。

    总结:本文是根据官方文档和对于源码的简单分析得出的结论,进行了一部分验证,如果大家有什么问题欢迎提出,交流,如果没有问题且你从文章中得到了些许帮助,那么伸出你的小手点个赞就是对笔者最大的鼓励,谢谢大家读完!欢迎提出意见

    相关文章

      网友评论

          本文标题:SpringBoot定义HttpMessageConverter

          本文链接:https://www.haomeiwen.com/subject/wmyitqtx.html