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

初升級SpringBoot2.0版本,在已經使用SpringBoot1.x的系統內仍是存在一些兼容性的問題,有不少變化!!!也存在一些過期的方法、配置文件信息以及類,咱們在以前版本的SpringBoot1.x中可使用WebMvcConfigurerAdapter抽象類來處理SpringMVC相關的配置,因爲SpringBoot2.0版本最低支持 JDK1.8環境,在JDK1.8引入了特殊的關鍵字default,該關鍵字配置在interface接口的方法時子類能夠不去實現該方法,至關於抽象類內已經實現的接口方法。git

本章目標

代替WebMvcConfigurerAdapter抽象類擴展SpringMVC相關配置。web

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配置文件以下所示:spring

//......
<dependencies>
        <!--添加web依賴配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>
//......
複製代碼

新版本咱們能夠採用兩種方式來配置WebMvcConfigurerbash

  1. JavaBean方式配置WebMvcConfigurer
  2. 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方式感受沒事區別,只不過是編碼形式有一點變化。app

測試攔截器

在上面配置內添加了一個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;
    }
}
複製代碼

測試控制器

爲了測試訪問地址被攔截須要添加一個測試控制器請求地址,測試控制器代碼以下所示:ide

/**
 * 測試控制器
 * @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,查看控制檯輸出內容,以下所示:spring-boot

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技術交流羣,共同進步。

QQ技術交流羣

微信掃碼關注 - 專一分享
相關文章
相關標籤/搜索