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 +)中顯示已經過時,雖然還可以使用,官方不推薦使用。

它的替代方案有兩種:
- 繼承WebMvcConfigurationSupport 類(繼承這個類后,SpringMVC自動配置失效,相當於全面接管SpringMVC )
- 實現 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;
}
}