作用:当配置类中添加了该注解了之后,就表示某个模块的自动配置就都失效了,全部都要自己配置

例如下面这个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里只有基础的功能

最新文章

  1. Android课程---时间日期对话框
  2. OllyDBG 1.10
  3. Android NDK 开发(一)--环境搭建【转】
  4. Java遍历所有网卡打印对应IP
  5. c# try..... catch
  6. undefined与null的区别(待修整)
  7. mysql @变量和变量的区别及怎么判断记录唯一性
  8. web标准(复习)--7 横向导航菜单
  9. [ Swift框架 ] # SwiftyJSON
  10. .Net Core迁移到MSBuild平台(二)
  11. [Swift]LeetCode1021. 删除最外层的括号 | Remove Outermost Parentheses
  12. RS232串口的Windows编程纪要
  13. HTML做的网页 如何使当前页面跳转到另一页面锚点处
  14. GNU Screen Usage
  15. 嵌入式Linux内核tasklet机制(附实测代码)
  16. 2018 Multi-University Training Contest 2 部分简单题解析
  17. Ubuntu18.04 安装搜狗输入法后无法启动的问题
  18. Android程序中有多个Activity时的可全部退出方法
  19. IIS6/IIS7环境下实现支持mp4视频随意拖动、预览播放、边下载边播放
  20. PHP採集利器:依据開始字符串和结束字符串截取须要的採集内容数据

热门文章

  1. (七)React Ant Design Pro + .Net5 WebApi:后端环境搭建-日志、异常处理
  2. MySQL报错 SQL ERROR:1064 ,SQLState:42000
  3. 初探 Elasticsearch,学习笔记第一讲
  4. jdk配置完成tomcat无法启动问题解决
  5. Numpy库基础___五
  6. C 如何将输出的地址转化为十进制数
  7. PLSQL导出Oracle表结构
  8. Java的http post请求01之HttpURLConnection
  9. CVE-2015-1427(Groovy 沙盒绕过 && 代码执行漏洞)
  10. python的内存回收机制