Spring Boot-@EnableWebMvc注解
2024-10-19 09:39:42
作用:当配置类中添加了该注解了之后,就表示某个模块的自动配置就都失效了,全部都要自己配置
例如下面这个MVC模块的配置类
/**
* @author:抱着鱼睡觉的喵喵
* @date:2020/12/18
* @description:
*/
//使用WebMvcConfigurer接口扩展Spring MVC的功能
@Configuration
@EnableWebMvc
public class MyMVcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//向浏览器发送/hao请求来到success
registry.addViewController("/hao").setViewName("forward:success");
}
}
自此这段代码就表示SpringMVC的自动配置就都失效了
为了加一个@EableWebMvc注解,自动配置就都失效了呢?
原理如下:
ctrl+右键点击该注解查看源码
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({DelegatingWebMvcConfiguration.class})
public @interface EnableWebMvc {
}
其中的DelegatingWebMvcConfiguration是核心-》继续进去查看源码
核心的代码如下
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
我们发现这个类继承了WebMvcConfigurationSupport,那这和自动配置失效有什么联系呢?
重点来了
查看WebMvcAutoConfiguration ---- web模块自动配置类-》源码
头部代码如下
@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 {
其中的@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)是关键,它的意思是容器中没有WebMvcConfigurationSupport这个类时,自动配置类才会生效
所以我们就明白了,因为@EableConfiguration注解中的DelegatingWebMvcConfiguration继承了WebMvcConfigurationSupport,所以才会导致自动配置类失效
===========================================================
总结:
@EnableWebMvc将WebMvcConfigurationSupport组件导入容器里了,WebMvcConfigurationSupport里只有基础的功能
最新文章
- Android课程---时间日期对话框
- OllyDBG 1.10
- Android NDK 开发(一)--环境搭建【转】
- Java遍历所有网卡打印对应IP
- c# try..... catch
- undefined与null的区别(待修整)
- mysql @变量和变量的区别及怎么判断记录唯一性
- web标准(复习)--7 横向导航菜单
- [ Swift框架 ] # SwiftyJSON
- .Net Core迁移到MSBuild平台(二)
- [Swift]LeetCode1021. 删除最外层的括号 | Remove Outermost Parentheses
- RS232串口的Windows编程纪要
- HTML做的网页 如何使当前页面跳转到另一页面锚点处
- GNU Screen Usage
- 嵌入式Linux内核tasklet机制(附实测代码)
- 2018 Multi-University Training Contest 2 部分简单题解析
- Ubuntu18.04 安装搜狗输入法后无法启动的问题
- Android程序中有多个Activity时的可全部退出方法
- IIS6/IIS7环境下实现支持mp4视频随意拖动、预览播放、边下载边播放
- PHP採集利器:依据開始字符串和结束字符串截取须要的採集内容数据
热门文章
- (七)React Ant Design Pro + .Net5 WebApi:后端环境搭建-日志、异常处理
- MySQL报错 SQL ERROR:1064 ,SQLState:42000
- 初探 Elasticsearch,学习笔记第一讲
- jdk配置完成tomcat无法启动问题解决
- Numpy库基础___五
- C 如何将输出的地址转化为十进制数
- PLSQL导出Oracle表结构
- Java的http post请求01之HttpURLConnection
- CVE-2015-1427(Groovy 沙盒绕过 && 代码执行漏洞)
- python的内存回收机制