注解@EnableWebMvc如何导致web中的SpringMvc失效
全面接管Spring MVC
是指SpringBoot对SpringMVC的自动配置,不需要了
所有的,SpringMVC的自动配置都失效了
所有的,都需要自己配置
@EnableWebMvc
需要在配置类中添加@EnableWebMvc即可
1 2 3 4 5 6 7 8 9 10 11 12 | //使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能 @EnableWebMvc //全面接管SpringMVC @Configuration public class MyMvcConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { // super.addViewControllers(registry); //浏览器发送 /atguigu 请求来到 success registry.addViewController( "/atguigu" ).setViewName( "success" ); } } |
实现原理
WebMvcAutoconfiguration.java没有 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)这个场景才会生效
1 2 3 4 5 6 7 8 | @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 { |
看它的继承树
而@EnableWebMvc点进去,发现导入了DelegatingWebMvcConfiguration.class,而DelegatingWebMvcConfiguration.class的父类就是WebMvcConfigurationSupport.class,所以全部失效,全权接管springMvc
1 2 3 4 5 6 | @Retention (RetentionPolicy.RUNTIME) @Target ({ElementType.TYPE}) @Documented @Import ({DelegatingWebMvcConfiguration. class }) public @interface EnableWebMvc { } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步