第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer兩種配置方式了嗎搞乏?

初升級(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

  1. JavaBean方式配置WebMvcConfigurer
  2. 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

作者個(gè)人 博客
使用開(kāi)源框架 ApiBoot 助你成為Api接口服務(wù)架構(gòu)師

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜈膨,隨后出現(xiàn)的幾起案子屿笼,更是在濱河造成了極大的恐慌,老刑警劉巖翁巍,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驴一,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡灶壶,警方通過(guò)查閱死者的電腦和手機(jī)肝断,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)驰凛,“玉大人胸懈,你說(shuō)我怎么就攤上這事∏∠欤” “怎么了趣钱?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胚宦。 經(jīng)常有香客問(wèn)我首有,道長(zhǎng),這世上最難降的妖魔是什么间唉? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任绞灼,我火速辦了婚禮,結(jié)果婚禮上呈野,老公的妹妹穿的比我還像新娘低矮。我一直安慰自己,他們只是感情好被冒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布军掂。 她就那樣靜靜地躺著轮蜕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝗锥。 梳的紋絲不亂的頭發(fā)上跃洛,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音终议,去河邊找鬼汇竭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛穴张,可吹牛的內(nèi)容都是我干的细燎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼皂甘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玻驻!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起偿枕,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤璧瞬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后渐夸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嗤锉,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年墓塌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了档冬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桃纯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出披坏,到底是詐尸還是另有隱情态坦,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布棒拂,位于F島的核電站伞梯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏帚屉。R本人自食惡果不足惜谜诫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望攻旦。 院中可真熱鬧喻旷,春花似錦、人聲如沸牢屋。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至锋谐,卻和暖如春遍尺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涮拗。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工乾戏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人三热。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓鼓择,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親康铭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惯退,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容