1.HttpMessageConverter的作用
其實通過名字就可以大概猜個七七八八矗钟,就是SpringMvc在接或傳Http消息的一個轉(zhuǎn)換器唆香,通俗的理解一下。
轉(zhuǎn)換流程如下圖:
2.如何定義HttpMessageConverter
Spring官網(wǎng)給出兩種定義方式
①xml方式
②configuration 方式
3.@EnableWebMvc
在用configuration 方式自定義HttpMessageConverter看到了官方的例子吨艇,說需要添加一個@EnableWebMvc的注解,那究竟要不要添加呢腾啥,這個注解是做什么的呢东涡,筆者在這個注解上耽誤了一些時間,下面我將娓娓道來倘待。
①@EnableWebMvc注解的作用
上圖:
EnableWebMvc引入了DelegatingWebMvcConfiguration疮跑,DelegatingWebMvcConfiguration繼承了WebMvcConfigurationSupport,ok不要怕凸舵,記住WebMvcConfigurationSupport就夠了祖娘,記住WebMvcConfigurationSupport,記住WebMvcConfigurationSupport重要的事說三遍。
簡單說EnableWebMvc的作用就是實例化了一個WebMvcConfigurationSupport
②如果不加EnableWebMvc啊奄,誰會去實例化WebMvcConfigurationSupport
請看WebMvcAutoConfiguration
ok,不用往下看就知道了WebMvcAutoConfiguration肯定實例化WebMvcConfigurationSupport渐苏,就因為紅線那句話,當(dāng)缺少WebMvcConfigurationSupport的bean的時候菇夸,這個自動配置才會執(zhí)行
那么看到這里大家是不是已經(jīng)知道答案了琼富,當(dāng)你的模塊使用了@EnableWebMvc,那你將失去springBoot的自動配置庄新,那如果使用@EnableWebMvc會發(fā)生什么呢鞠眉?
看下圖:
又見老大哥,在重要的事情強(qiáng)調(diào)三遍的時候我們知道老大哥繼承了WebMvcConfigurationSupport择诈,然后如圖:
沒錯老大哥把所有散落在外的實現(xiàn)了WebMvcConfigurer接口的bean都加載進(jìn)來了械蹋,為啥要加載,肯定是為了覆蓋默認(rèn)配置呀羞芍,所以說如果不使用@EnableWebMvc哗戈,那么只要實現(xiàn)了WebMvcConfigurer,你的配置會覆蓋SpringBoot的默認(rèn)配置涩金,如果使用了@EnableWebMvc那么這個世界只有你的配置谱醇。
總結(jié):本文是根據(jù)官方文檔和對于源碼的簡單分析得出的結(jié)論,進(jìn)行了一部分驗證步做,如果大家有什么問題歡迎提出副渴,交流,如果沒有問題且你從文章中得到了些許幫助全度,那么伸出你的小手點(diǎn)個贊就是對筆者最大的鼓勵煮剧,謝謝大家讀完!歡迎提出意見