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;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM