WebMvcConfigurationSupport 和WebMvcConfigurationAdapter的區別


今天看項目的代碼的時候發現了一個有趣的事情,一個為了解決跨域問題的配置類

//@Configuration
public class CorsConfigure extends WebMvcConfigurationSupport

我發現繼承的是
WebMvcConfigurationSupport,然后我看網上對於跨域問題的解決配置類中繼承的都是WebMvcConfigurationAdapter  

我就覺得很奇怪,就去百度了一下他們的差別,現在記錄一下

1.@EnableWebMvc+extends WebMvcConfigurationAdapter,在擴展的類中重寫父類的方法即可,這種方式會屏蔽springboot的@EnableAutoConfiguration中的設置
2.extends WebMvcConfigurationSupport,在擴展的類中重寫父類的方法即可,這種方式會屏蔽springboot的@EnableAutoConfiguration中的設置
3.extends WebMvcConfigurationAdapter,在擴展的類中重寫父類的方法即可,這種方式依舊使用springboot的@EnableAutoConfiguration中的設置

 

至於為什么會屏蔽@EnableAutoConfiguration的設置,這要看@EnableAutoConfiguration到底做了什么,springMvc在boot完成自動裝配相關的類:WebMvcAutoConfiguration

@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration 

可以看到一旦boot中一旦出現WebMvcConfigurationSupport類的話,這個自動裝配的類就不會出現了,這就是上述1,2表述的原因

另外現在WebMvcConfigurationAdapter已經被WebMvcConfigurer代替

 

至於3,比較復雜,想要深入了解可以參考原文

 

 

注意:經過我實踐發現,在springboot項目中 一旦寫了一個配置類  繼承WebMvcConfigurationSupport 之后  再寫一個類 實現  WebMvcConfigurer 就沒有效果了!但是一旦在boot項目中,加上@EnableAWebMvc之后,

繼承WebMvcConfigurationSupport 的類就失效了,實現  WebMvcConfigurer 的類就起作用了

 

也就是說 使用 implement WebMvcConfigurer 會在支持原有默認配置的情況下 新增配置  一旦加入@EnableWebMvc相當於引入了WebMvcConfigurationSupport 就會屏蔽掉默認的配置

 

 

 

 


參考
原文:https://blog.csdn.net/lqadam/article/details/80637335

 

 

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM