SpringBoot WebMVC的自動配置信息都在WebMvcAutoConfiguration這個類中。css
這個註解的意思是:僅僅在當前上下文中不存在某個對象時,纔會實例化一個Beanweb
這個咱們要說的WebMvcConfigurerAdapter有啥關係呢?spring
看下圖:框架
網上搜索解決辦法,發現大可能是說繼承 WebMvcConfigurationSupport 來代替 ,可是一旦繼承WebMvcConfigurationSupport後就會出現新的問題:會發現Spring Boot的WebMvc自動配置失效,具體表現好比訪問不到靜態資源(js,css等)了。code
這是由於WebMvc的自動配置都在WebMvcAutoConfiguration類中,可是類中有這個註解: @ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
對象
意思是一旦在容器中檢測到WebMvcConfigurationSupport這個類,WebMvcAutoConfiguration類中的配置都不生效。blog
因此一旦咱們本身寫的配置類繼承了WebMvcConfigurationSupport,至關於容器中已經有了WebMvcConfigurationSupport,因此默認配置都不會生效,都得本身在配置文件中配置。繼承
建議本身寫的配置類實現org.springframework.web.servlet.config.annotation.WebMvcConfigurer
接口,這個接口的方法都加了jdk1.8的 default方法修飾,不強制實現全部的方法,能夠根據實際實現相關的方法。接口
Spring框架還提供了不少@Condition給咱們用,固然總結用語哪一種好理解,看給位讀者嘍 資源
@Conditional(TestCondition.class)
這句代碼能夠標註在類上面,表示該類下面的全部@Bean都會啓用配置,也能夠標註在方法上面,只是對該方法啓用配置。
@ConditionalOnBean(僅僅在當前上下文中存在某個對象時,纔會實例化一個Bean) @ConditionalOnClass(某個class位於類路徑上,纔會實例化一個Bean) @ConditionalOnExpression(當表達式爲true的時候,纔會實例化一個Bean) @ConditionalOnMissingBean(僅僅在當前上下文中不存在某個對象時,纔會實例化一個Bean) @ConditionalOnMissingClass(某個class類路徑上不存在的時候,纔會實例化一個Bean) @ConditionalOnNotWebApplication(不是web應用)