美文网首页
WebMvcConfigurationSupport和WebMv

WebMvcConfigurationSupport和WebMv

作者: 造一个大大的轮子 | 来源:发表于2019-12-15 17:19 被阅读0次

    问题描述: 今天在使用SpringBoot 2.x更改其默认配置时,使用了下面的方式:

    public class WebConfig extends WebMvcConfigurationSupport {
        @Override
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/goods/**").addResourceLocations("/templates/");
            super.addResourceHandlers(registry);
        }
    }
    

    即使用了WebMvcConfigurationSupport作为辅助类自定义MVC的一些配置,发现默认的配置不生效了,即通过http://localhost:8080/brand.html访问不到这个文件了:

    image.png

    排查了很久,原来当classpath中存在WebMvcConfigurationSupport 对象时,自动配置就不会生效:


    image.png

    这个注解的意思是在项目类路径中 缺少 WebMvcConfigurationSupport类型的bean时改自动配置类才会生效,所以继承 WebMvcConfigurationSupport 后需要自己再重写相应的方法。

    如果想要使用自动配置生效,又要按自己的需要重写某些方法,比如增加 viewController ,则可以自己的配置类可以继承 WebMvcConfigurerAdapter 这个类。不过在spring5.0版本后这个类被丢弃了 WebMvcConfigurerAdapter ,虽然还可以用,但是看起来不好。Java 8以后接口可以有default方法,因此直接实现WebMvcConfigurer接口就好(WebMvcConfigurerAdapter 存在意义就是为WebMvcConfigurer接口提供空实现)

    例如我们还是为静态资源提供一个静态资源提供一个处理器:

    
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/goods/**").addResourceLocations("/goods/");
        }
    }
    

    推荐阅读:
    继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器
    WebMvcConfigurer 与 WebMvcConfigurationSupport 关系及避坑指南

    相关文章

      网友评论

          本文标题:WebMvcConfigurationSupport和WebMv

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