![Spring Boot实战:从0开始动手搭建企业级项目](https://wfqqreader-1252317822.image.myqcloud.com/cover/850/40107850/b_40107850.jpg)
7.2 WebMvcAutoConfiguration源码分析
WebMvcAutoConfiguration自动配置类的定义同样也在spring-boot-autoconfigure-2.3.7. RELEASE.jar包的org.springframework.boot.autoconfigure.web包中。WebMvcAutoConfiguration类的源码如下所示:
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/129-2.jpg?sign=1739256383-oxZ97mQH2xkZztonCZtycVFhtSjNR2VU-0-8e3474f1190d69b1c6d6c5ca7c4830e8)
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/130-1.jpg?sign=1739256383-ZTfG3yK7QE7jCxuTzfBpcWwS8xU7J334-0-ea2bb2bc88cf23d0ce01b559b8711be1)
WebMvcAutoConfiguration类的注解释义如下所示。
@Configuration(proxyBeanMethods=false):指定该类为配置类。
@ConditionalOnWebApplication(type=Type.SERVLET):当前应用是一个Servlet Web应用,这个配置类才会生效。
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE+10):类的加载顺序,数值越小越优先加载。
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class}):判断当前classpath是否存在指定类Servlet类、DispatcherServle类和WebMvcConfigurer类,存在则生效。
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class):判断IOC容器中是否存在WebMvcConfigurationSupport类型的Bean,不存在则生效。
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecution AutoConfiguration.class, ValidationAutoConfiguration.class }) :自动配置的生效时间在DispatcherServletAutoConfiguration等三个自动配置类之后。
通过源码可知,WebMvcAutoConfiguration自动配置类的自动配置触发条件:当前项目类型必须为SERVLET,当前classpath存在Servlet类、DispatcherServle类和WebMvcConfigurer类,未向IOC容器中注册WebMvcConfigurationSupport类型的Bean,并且@AutoConfigureAfter注解定义了自动配置类生效时间在DispatcherServletAuto Configuration、TaskExecutionAutoConfiguratio、ValidationAutoConfiguration自动配置之后。
WebMvcAutoConfiguration中有3个主要的内部类,如图7-2所示。具体的自动配置逻辑实现都是在这3个内部类中实现的。
![](https://epubservercos.yuewen.com/3069E4/20862583308964806/epubprivate/OEBPS/Images/130-2.jpg?sign=1739256383-hsf3Fv6DHJEiOQu7cLL99Bt0LVoKJ55p-0-a7f986dddc63ddf5b008ec386b806391)
图7-2 WebMvcAutoConfiguration类的3个内部类