Spring boot WebMvcConfigurationSupport vs WebMvcConfigurer

PS:区别是当继承WebMvcConfigurationSupport时会覆盖原配置,而WebMvcConfigurer是自定义配置.

最近在Spring boot环境下调试一个问题时发现自己定义的WebMvcConfigurer不生效,然后就把Spring boot加载Spring mvc的配置看了一遍,后来发现WebMvcAutoConfiguration类ConditionOn了WebMvcConfigurationSupport方法,当实现这个类时不执行Spring boot的WebMvcAutoConfiguration类配置信息,也就是我们在项目中不能及继承WebMvcConfigurationSupport类又实现

WebMvcConfigurer类.

代码分析:

从EnableWebMvcConfiguration配置类开始,当它注入时父类会注入Spring容器中所有的WebMvcConfigurer类

Spring boot WebMvcConfigurationSupport vs WebMvcConfigurer

接着注入RequestMappingHandlerAdapter Bean 它会调用父类的requestMappingHandlerAdapter方法

Spring boot WebMvcConfigurationSupport vs WebMvcConfigurer

Spring boot WebMvcConfigurationSupport vs WebMvcConfigurer

这个时候获取配置,例如自定义了返回结果Handler, WebMvcConfigurerComposite会遍历调用WebMvcConfigurer实现类的

addReturnValueHandlers方法,会把自定义配置加载到默认的配置中.

Spring boot WebMvcConfigurationSupport vs WebMvcConfigurer

Spring boot WebMvcConfigurationSupport vs WebMvcConfigurer