目录
WebMvcAutoConfigurationAdapter
SpringBoot版本:2.1.1
流程分析
先看下SpringBoot的MVC自动配置类WebMvcAutoConfiguration,位于spring-boot-autoconfigure-2.1.1.RELEASE.jar包下。
类上很多注解,一个一个解释,@Conditiona注解前面有说过,可以参考。
@Configuration:标注是一个配置类
@ConditionalOnWebApplication:应用类型为web应用时匹配
@ConditionalOnClass:当前类路径下存在Servlet.class,DispatcherServlet.class,WebMvcConfigurer.class时匹配
@ConditionalOnMissingBean:不存在WebMvcConfigurationSupport类型的bean时匹配
@AutoConfigureOrder:通过order可以对自动配置类进行排序,该类order为Integer.MIN_VALUE+10
@AutoConfigureAfter:在其他指定的自动配置类之后应用,这里是在DispatcherServletAutoConfiguration,TaskExecutionAutoConfiguration,ValidationAutoConfiguration自动配置之后应用
注意上面标红的一行, 不存在WebMvcConfigurationSupport类型bean时匹配,即如果编写类继承了WebMvcConfigurationSupport,那么SpringBoot就不会应用该自动配置类,会出现什么情况呢?也就是下面要说的。
WebMvcAutoConfiguration关注两个静态的内部类WebMvcAutoConfigurationAdapter和EnableWebMvcConfiguration,
EnableWebMvcConfiguration
先看下这个内部类,继承了DelegatingWebMvcConfiguration,上面的注释说配置等效于@EnableWebMvc,至于为啥,看下面的截图。暂时就不关注该类中的其他内容了,如RequestMappingHandlerMapping处理url映射....
DelegatingWebMvcConfiguration继承了WebMvcConfigurationSupport,该类也是用来配置MVC的类。
看DelegatingWebMvcConfiguration的这个方法,会自动装配WebMvcConfigurer类型的bean添加到configurers的属性delegates中,一个List<WebMvcConfigurer>。该类的所有方法都是委托给了WebMvcConfigurerComposite,在WebMvcConfigurerComposite中是循环List调用对应方法,即将相关配置方法委托给了自动装配的WebMvcConfigurer类型的bean。下面截图列举一个为例。
这里传入的bean有两个,一个就是下面要说的WebMvcAutoConfigurationAdapter,另一个是我自己编写的配置类。