SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法

SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法

环境:

IDEA :2020.1

Maven:3.5.6

SpringBoot: 2.3.2

在SpringBoot 1.0 + 中,WebMvcConfigurerAdapter是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制。实现视图控制,静态资源处理,添加拦截器等一系列操作。

常用方法有:

//添加拦截器
public void addInterceptors(InterceptorRegistry registry) {
    }
//添加静态资源处理
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    }
//添加视图控制
    public void addViewControllers(ViewControllerRegistry registry) {
    }

但是, WebMvcConfigurerAdapter 在 SpringBoot 2.0 + (Spring 5.0 +)中显示已经过时,虽然还可以使用,官方不推荐使用。

image-20200813162739341

它的替代方案有两种:

  1. 继承WebMvcConfigurationSupport 类(继承这个类后,SpringMVC自动配置失效,相当于全面接管SpringMVC )
  2. 实现 WebMvcConfigurer 接口

由于使用第一种会违背我们使用 SpringBoot 的初衷,增大工作量。

第二种方法其实和原来 WebMvcConfigurerAdapter 使用方法类似 ,只是改了接口名,下面介绍第二种方法:

@Configuration
public class mvcConfig /*extends WebMvcConfigurerAdapter*/ implements WebMvcConfigurer {   //WebMvcConfigurerAdapter已过时
    //已过时
    /*//拓展SpringMVC
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //super.addViewControllers(registry);
        registry.addViewController("/newhello").setViewName("hello");
    }

    //所有的WebMvcConfigurerAdapter组件都会一起起作用
    @Bean //将组件注册在容器
    public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){
        WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/").setViewName("login");
                registry.addViewController("/login.html").setViewName("login");
            }
        };
        return adapter;
    }*/

    @Bean //将组件注册在容器
    public WebMvcConfigurer webMvcConfigurer(){
        WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/").setViewName("login");
                registry.addViewController("/index.html").setViewName("login");
                registry.addViewController("/main.html").setViewName("dashboard");
            }

            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                InterceptorRegistration interceptor = registry.addInterceptor(new LoginHandlerinterceptor());
                interceptor.addPathPatterns("/**");
                interceptor.excludePathPatterns("/","/index.html","/user/login");
            }

//            @Override    并未拦截默认文件的静态资源,不需要进行处理
//            public void addResourceHandlers(ResourceHandlerRegistry registry) {
//                registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
//            }
        };
        return webMvcConfigurer;
    }
}
posted @ 2020-08-13 16:41  L1ng14  阅读(2078)  评论(0编辑  收藏  举报