美文网首页
SpringBoot中的mvc配置

SpringBoot中的mvc配置

作者: AlanSun2 | 来源:发表于2019-06-23 16:48 被阅读0次

    SpringBoot中对mvc配置主要使用到WebMvcAutoConfiguration

    @Configuration
    @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 {
        ...
    }
    
    1. Configuration: WebMvcAutoConfiguration 是一个配置类
    2. ConditionalOnWebApplication:必须是web环境
    3. ConditionalOnClass:类路径存在ServletDispatcherServletWebMvcConfigurer
    4. ConditionalOnMissingBean:不存在beanWebMvcConfigurationSupport
    5. AutoConfigureAfter:在DispatcherServletAutoConfigurationTaskExecutionAutoConfigurationValidationAutoConfiguration配置后配置

    这里注意下第4点,第4点要求不存在beanWebMvcConfigurationSupport,所以当你使用了注解@EnableWebMvc时,Spring会使用DelegatingWebMvcConfiguration配置mvc,而不是WebMvcAutoConfiguration

    WebMvcAutoConfiguration有五个静态内部类,写成内部类的原因是当WebMvcAutoConfiguration没有被启用时,内部类也不会被加载。

    五个内部类:

    • WebMvcAutoConfigurationAdapter
    • EnableWebMvcConfiguration
    • ResourceChainCustomizerConfiguration
    • ResourceChainResourceHandlerRegistrationCustomizer
    • OptionalPathExtensionContentNegotiationStrategy

    最重要是WebMvcAutoConfigurationAdapterEnableWebMvcConfiguration

    1. WebMvcAutoConfigurationAdapter

    类图:

    WebMvcAutoConfigurationAdapter.png

    可以看到WebMvcAutoConfigurationAdapterWebMvcConfigurer的一个实现,所以WebMvcAutoConfigurationAdapter的配置会被WebMvcConfigurationSupport加载,就像Spring-mvc配置中提到的。也就是一些默认的mvc配置,例如欢迎页,转换器,视图解析器。

    除此之外,WebMvcAutoConfigurationAdapter还有一个@Import(EnableWebMvcConfiguration.class)。说明在加载 WebMvcAutoConfigurationAdapter配之前需要加载EnableWebMvcConfiguration。这也是一个自动配种非常重要的类。

    2. EnableWebMvcConfiguration

    Spring-boot官方文档对此配置类的说明:

    Configuration equivalent to {@code @EnableWebMvc}.
    

    相对应的翻译:

    该配置类等价于使用注解`@EnableWebMvc`。
    

    也就是说,当EnableWebMvcConfiguration被加载时(使用Spring-boot配置项目时)我们不需要再使用注解@EnableWebMvc

    类图:

    035F7F09-8172-4a69-B701-C9E11170CAE2.png

    我们可以看到,它就是一个DelegatingWebMvcConfiguration,这也解释了为什么当此类被加载时和@EnableWebMvc是等价的。

    2.1 作用

    EnableWebMvcConfiguration中主要是对父类的重写。

    相关文章

      网友评论

          本文标题:SpringBoot中的mvc配置

          本文链接:https://www.haomeiwen.com/subject/lvhlqctx.html