springboot 在不存在 WebMvcConfigurationSupport.class 这个类的时候才生效,而@EnableWebMvc 会注册一个DelegatingWebMvcConfiguration,该类是WebMvcConfigurationSupport的一个实现类,所以使用@EnableWebMvc注解,springboot自动配置类会失效。
WebMvcConfigurationSupport这个类会自动去寻找所有WebMvcConfigurer接口的实现类,@EnableWebmvc回去寻找WebMvcConfigurer,其实Springboot也注册一个
WebMvcConfigurationSupport的实现类,所以如果想要保存sprinboot自动配置同时,又想要自定义逻辑,只要实现WebMvcConfigurer接口,并且不要使用@EnableWebMvc即可。很多时候为了方便一般继承一个适配器类
WebMvcAutoConfigurationAdapter ,记得将该类加入ioc容器,一般使用@Configuration 注解将其标记为配置,让ioc进行解析
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {
}