
7.2 WebMvcAutoConfiguration源码分析
WebMvcAutoConfiguration自动配置类的定义同样也在spring-boot-autoconfigure-2.3.7. RELEASE.jar包的org.springframework.boot.autoconfigure.web包中。WebMvcAutoConfiguration类的源码如下所示:


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个内部类中实现的。

图7-2 WebMvcAutoConfiguration类的3个内部类