Springboot2.0踩坑——WebMvcConfigurerAdapter 过期

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

相关文章
相关标签/搜索