初升級SpringBoot2.0
版本,在已經使用SpringBoot1.x
的系統內還是存在一些相容性的問題,有很多變化!!!也存在一些過時的方法、配置檔案資訊以及類,我們在之前版本的SpringBoot1.x
中可以使用WebMvcConfigurerAdapter
抽象類來處理SpringMVC
相關的配置,由於SpringBoot2.0
版本最低支援 JDK1.8
環境,在JDK1.8
引入了特殊的關鍵字default
,該關鍵字配置在interface
介面的方法時子類可以不去實現該方法,相當於抽象類內已經實現的介面方法。
本章目標
代替WebMvcConfigurerAdapter
抽象類擴充套件SpringMVC
相關配置。
SpringBoot 企業級核心技術學習專題
專題 | 專題名稱 | 專題描述 |
---|---|---|
001 | Spring Boot 核心技術 | 講解SpringBoot一些企業級層面的核心元件 |
002 | Spring Boot 核心技術章節原始碼 | Spring Boot 核心技術簡書每一篇文章碼雲對應原始碼 |
003 | Spring Cloud 核心技術 | 對Spring Cloud核心技術全面講解 |
004 | Spring Cloud 核心技術章節原始碼 | Spring Cloud 核心技術簡書每一篇文章對應原始碼 |
005 | QueryDSL 核心技術 | 全面講解QueryDSL核心技術以及基於SpringBoot整合SpringDataJPA |
006 | SpringDataJPA 核心技術 | 全面講解SpringDataJPA核心技術 |
007 | SpringBoot核心技術學習目錄 | SpringBoot系統的學習目錄,敬請關注點贊!!! |
構建專案
我們本章僅僅使用了web
相關的依賴,pom.xml
配置檔案如下所示:
//......
<dependencies>
<!--新增web依賴配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
//......
複製程式碼
新版本我們可以採用兩種方式來配置WebMvcConfigurer
JavaBean
方式配置WebMvcConfigurer
WebMvcConfigurer
實現類方式
方式一:JavaBean配置WebMvcConfigurer
採用JavaBean
方式我們只需要新增一個web
相關配置的型別,並且配置@Configuration
註解,將該配置類託管給Spring IOC
完成配置,程式碼配置如下所示:
/**
* web配置類
*
* @author:於起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/15
* Time:下午10:29
* 簡書:http://www.jianshu.com/u/092df3f77bca
* ================================
*/
@Configuration
public class WebJavaBeanConfiguration {
/**
* 日誌攔截器
*/
@Autowired
private LogInterceptor logInterceptor;
/**
* 例項化WebMvcConfigurer介面
*
* @return
*/
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
/**
* 新增攔截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor).addPathPatterns("/**");
}
};
}
}
複製程式碼
我們通過@Bean
註解的返回值來完成WebMvcConfigurer
的配置例項化,在WebMvcConfigurer
介面例項內呼叫addInterceptors
方法完成新增攔截器配置,跟之前WebMvcConfigurerAdapter
方式感覺沒事區別,只不過是編碼形式有一點變化。
測試攔截器
在上面配置內新增了一個LogInterceptor
攔截器,該攔截器目的很簡單,僅僅是測試攔截器配置是否生效,程式碼也很簡單,輸出訪問地址的URI
,實現程式碼如下所示:
@Component
public class LogInterceptor implements HandlerInterceptor {
/**
* logger instance
*/
static Logger logger = LoggerFactory.getLogger(LogInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
logger.info("請求路徑:{}", request.getRequestURI());
return true;
}
}
複製程式碼
測試控制器
為了測試訪問地址被攔截需要新增一個測試控制器請求地址,測試控制器程式碼如下所示:
/**
* 測試控制器
* @author:於起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/15
* Time:下午10:34
* 簡書:http://www.jianshu.com/u/092df3f77bca
* ================================
*/
@RestController
public class TestController {
/**
* 測試攔截地址
* @return
*/
@RequestMapping(value = "/index")
public String index() {
return "Success";
}
}
複製程式碼
執行測試配置
我們來啟動專案,訪問地址http://127.0.0.1:8080/index,檢視控制檯輸出內容,如下所示:
2018-03-17 16:51:26.633 INFO 2152 --- [nio-8080-exec-1] c.h.c.interceptors.LogInterceptor : 請求路徑:/index
複製程式碼
根據日誌的輸出我們判定
JavaBean
配置WebMvcConfigurer
的方式是可以生效的,回想文章開頭說到的關鍵字deault
,既然default
修飾的方法可以不被子類實現,那麼我們完全可以實現WebMvcConfigurer
介面,來新增對應的配置,下面我們來嘗試新增一個新的配置類使用實現介面的方式來新增攔截器的配置。
方式二:實現類配置WebMvcConfigurer
我們建立一個名為WebConfiguration
的配置類並且實現WebMvcConfigurer
介面,程式碼如下所示:
/**
* web相關配置類
* @author:於起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/17
* Time:下午4:45
* 簡書:http://www.jianshu.com/u/092df3f77bca
* ================================
*/
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
/**
* 日誌攔截器
*/
@Autowired
private LogInterceptor logInterceptor;
/**
* 重寫新增攔截器方法並新增配置攔截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor).addPathPatterns("/**");
}
}
複製程式碼
第二種方式有點我們之前使用的感覺,只不過之前是使用的WebMvcConfigurerAdapter
抽象類,而現在我們直接使用WebMvcConfigurer
介面。
正因為
SpringBoot2.0
是基於JDK1.8
及以上版本,所以可以完全使用JDK1.8
新特性提供更好的實現方式。
重啟嘗試再次測試
我們重啟專案,再次訪問地址http://127.0.0.1:8080/index在控制檯檢視,輸出內容跟方式一
一樣,也就表明了這種配置也是可以生效的。
總結
本章介紹了SpringBoot2.0
版本的WebMvcConfigurer
兩種的配置方式,可以根據自己的喜好在專案中進行配置,不過第二種可能更吻合專案中的開發模式。
本章原始碼已經上傳到碼雲: SpringBoot配套原始碼地址:gitee.com/hengboy/spr… SpringCloud配套原始碼地址:gitee.com/hengboy/spr… SpringBoot相關係列文章請訪問:目錄:SpringBoot學習目錄 QueryDSL相關係列文章請訪問:QueryDSL通用查詢框架學習目錄 SpringDataJPA相關係列文章請訪問:目錄:SpringDataJPA學習目錄,感謝閱讀! 歡迎加入QQ技術交流群,共同進步。