初升級(jí)SpringBoot2.0
版本波桩,在已經(jīng)使用SpringBoot1.x
的系統(tǒng)內(nèi)還是存在一些兼容性的問(wèn)題,有很多變化G攵亍8涠恪储玫!也存在一些過(guò)時(shí)的方法、配置文件信息以及類萤皂,我們?cè)谥鞍姹镜?code>SpringBoot1.x中可以使用WebMvcConfigurerAdapter
抽象類來(lái)處理SpringMVC
相關(guān)的配置撒穷,由于SpringBoot2.0
版本最低支持 JDK1.8
環(huán)境,在JDK1.8
引入了特殊的關(guān)鍵字default
裆熙,該關(guān)鍵字配置在interface
接口的方法時(shí)子類可以不去實(shí)現(xiàn)該方法端礼,相當(dāng)于抽象類內(nèi)已經(jīng)實(shí)現(xiàn)的接口方法。
免費(fèi)教程專題
恒宇少年在博客整理三套免費(fèi)學(xué)習(xí)教程專題
入录,由于文章偏多
特意添加了閱讀指南
蛤奥,新文章以及之前的文章都會(huì)在專題內(nèi)陸續(xù)填充
,希望可以幫助大家解惑更多知識(shí)點(diǎn)僚稿。
本章目標(biāo)
代替WebMvcConfigurerAdapter
抽象類擴(kuò)展SpringMVC
相關(guān)配置凡桥。
SpringBoot 企業(yè)級(jí)核心技術(shù)學(xué)習(xí)專題
專題 | 專題名稱 | 專題描述 |
---|---|---|
001 | Spring Boot 核心技術(shù) | 講解SpringBoot一些企業(yè)級(jí)層面的核心組件 |
002 | Spring Boot 核心技術(shù)章節(jié)源碼 | Spring Boot 核心技術(shù)簡(jiǎn)書每一篇文章碼云對(duì)應(yīng)源碼 |
003 | Spring Cloud 核心技術(shù) | 對(duì)Spring Cloud核心技術(shù)全面講解 |
004 | Spring Cloud 核心技術(shù)章節(jié)源碼 | Spring Cloud 核心技術(shù)簡(jiǎn)書每一篇文章對(duì)應(yīng)源碼 |
005 | QueryDSL 核心技術(shù) | 全面講解QueryDSL核心技術(shù)以及基于SpringBoot整合SpringDataJPA |
006 | SpringDataJPA 核心技術(shù) | 全面講解SpringDataJPA核心技術(shù) |
007 | SpringBoot核心技術(shù)學(xué)習(xí)目錄 | SpringBoot系統(tǒng)的學(xué)習(xí)目錄,敬請(qǐng)關(guān)注點(diǎn)贊J赐唬血!! |
構(gòu)建項(xiàng)目
我們本章僅僅使用了web
相關(guān)的依賴,pom.xml
配置文件如下所示:
//......
<dependencies>
<!--添加web依賴配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
//......
新版本我們可以采用兩種方式來(lái)配置WebMvcConfigurer
-
JavaBean
方式配置WebMvcConfigurer
-
WebMvcConfigurer
實(shí)現(xiàn)類方式
方式一:JavaBean配置WebMvcConfigurer
采用JavaBean
方式我們只需要添加一個(gè)web
相關(guān)配置的類型唤崭,并且配置@Configuration
注解,將該配置類托管給Spring IOC
完成配置脖律,代碼配置如下所示:
/**
* web配置類
*
* @author:于起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/15
* Time:下午10:29
* 簡(jiǎn)書:http://www.reibang.com/u/092df3f77bca
* ================================
*/
@Configuration
public class WebJavaBeanConfiguration {
/**
* 日志攔截器
*/
@Autowired
private LogInterceptor logInterceptor;
/**
* 實(shí)例化WebMvcConfigurer接口
*
* @return
*/
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
/**
* 添加攔截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor).addPathPatterns("/**");
}
};
}
}
我們通過(guò)@Bean
注解的返回值來(lái)完成WebMvcConfigurer
的配置實(shí)例化谢肾,在WebMvcConfigurer
接口實(shí)例內(nèi)調(diào)用addInterceptors
方法完成添加攔截器配置,跟之前WebMvcConfigurerAdapter
方式感覺(jué)沒(méi)事區(qū)別小泉,只不過(guò)是編碼形式有一點(diǎn)變化芦疏。
測(cè)試攔截器
在上面配置內(nèi)添加了一個(gè)LogInterceptor
攔截器,該攔截器目的很簡(jiǎn)單微姊,僅僅是測(cè)試攔截器配置是否生效酸茴,代碼也很簡(jiǎn)單,輸出訪問(wèn)地址的URI
兢交,實(shí)現(xiàn)代碼如下所示:
@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("請(qǐng)求路徑:{}", request.getRequestURI());
return true;
}
}
測(cè)試控制器
為了測(cè)試訪問(wèn)地址被攔截需要添加一個(gè)測(cè)試控制器請(qǐng)求地址薪捍,測(cè)試控制器代碼如下所示:
/**
* 測(cè)試控制器
* @author:于起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/15
* Time:下午10:34
* 簡(jiǎn)書:http://www.reibang.com/u/092df3f77bca
* ================================
*/
@RestController
public class TestController {
/**
* 測(cè)試攔截地址
* @return
*/
@RequestMapping(value = "/index")
public String index() {
return "Success";
}
}
運(yùn)行測(cè)試配置
我們來(lái)啟動(dòng)項(xiàng)目,訪問(wèn)地址http://127.0.0.1:8080/index配喳,查看控制臺(tái)輸出內(nèi)容酪穿,如下所示:
2018-03-17 16:51:26.633 INFO 2152 --- [nio-8080-exec-1] c.h.c.interceptors.LogInterceptor : 請(qǐng)求路徑:/index
根據(jù)日志的輸出我們判定
JavaBean
配置WebMvcConfigurer
的方式是可以生效的,回想文章開(kāi)頭說(shuō)到的關(guān)鍵字deault
晴裹,既然default
修飾的方法可以不被子類實(shí)現(xiàn)被济,那么我們完全可以實(shí)現(xiàn)WebMvcConfigurer
接口,來(lái)添加對(duì)應(yīng)的配置涧团,下面我們來(lái)嘗試添加一個(gè)新的配置類使用實(shí)現(xiàn)接口的方式來(lái)添加攔截器的配置只磷。
方式二:實(shí)現(xiàn)類配置WebMvcConfigurer
我們創(chuàng)建一個(gè)名為WebConfiguration
的配置類并且實(shí)現(xiàn)WebMvcConfigurer
接口经磅,代碼如下所示:
/**
* web相關(guān)配置類
* @author:于起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/17
* Time:下午4:45
* 簡(jiǎn)書:http://www.reibang.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("/**");
}
}
第二種方式有點(diǎn)我們之前使用的感覺(jué),只不過(guò)之前是使用的WebMvcConfigurerAdapter
抽象類钮追,而現(xiàn)在我們直接使用WebMvcConfigurer
接口预厌。
正因?yàn)?code>SpringBoot2.0是基于
JDK1.8
及以上版本,所以可以完全使用JDK1.8
新特性提供更好的實(shí)現(xiàn)方式畏陕。
重啟嘗試再次測(cè)試
我們重啟項(xiàng)目配乓,再次訪問(wèn)地址http://127.0.0.1:8080/index在控制臺(tái)查看,輸出內(nèi)容跟方式一
一樣惠毁,也就表明了這種配置也是可以生效的犹芹。
總結(jié)
本章介紹了SpringBoot2.0
版本的WebMvcConfigurer
兩種的配置方式,可以根據(jù)自己的喜好在項(xiàng)目中進(jìn)行配置鞠绰,不過(guò)第二種可能更吻合項(xiàng)目中的開(kāi)發(fā)模式腰埂。
本章源碼已經(jīng)上傳到碼云:
SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter