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应用)