国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

第三十四章:SpringBoot配置類WebMvcConfigurerAdapter

springDevBird / 438人閱讀

摘要:本章目標(biāo)繼承采用形式實(shí)現(xiàn)個(gè)性化配置定制。本章代碼已經(jīng)上傳到碼云網(wǎng)頁(yè)地址地址相關(guān)系列文章請(qǐng)?jiān)L問(wèn)目錄學(xué)習(xí)目錄相關(guān)系列文章請(qǐng)?jiān)L問(wèn)通用查詢框架學(xué)習(xí)目錄相關(guān)系列文章請(qǐng)?jiān)L問(wèn)目錄學(xué)習(xí)目錄感謝閱讀歡迎加入技術(shù)交流群,共同進(jìn)步。

WebMvcConfigurerAdapter配置類其實(shí)是Spring內(nèi)部的一種配置方式,采用JavaBean的形式來(lái)代替?zhèn)鹘y(tǒng)的xml配置文件形式進(jìn)行針對(duì)框架個(gè)性化定制,下面我們來(lái)看一下該類內(nèi)的常用方法。

本章目標(biāo)

繼承WebMvcConfigurerAdapter采用JavaBean形式實(shí)現(xiàn)個(gè)性化配置定制。

構(gòu)建項(xiàng)目

本章內(nèi)容同樣不涉及到業(yè)務(wù)邏輯,我們創(chuàng)建一個(gè)web項(xiàng)目即可,pom.xml配置文件如下所示:

...//省略

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-tomcat
            
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
...//省略
WebMvcConfigurerAdapter實(shí)現(xiàn)類

我們創(chuàng)建一個(gè)配置實(shí)體類型,并繼承WebMvcConfigurerAdapter,代碼如下所示:

package com.yuqiyu.chapter34;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

import java.util.List;

/**
 * 自定義配置類實(shí)現(xiàn)JavaBean注解形式配置
 * ========================
 * Created with IntelliJ IDEA.
 * User:恒宇少年
 * Date:2017/9/3
 * Time:21:48
 * 碼云:http://git.oschina.net/jnyqy
 * ========================
 */
@Configuration
public class WebConfiguration
    extends WebMvcConfigurerAdapter
{
}

我們?cè)谂渲妙惿咸砑恿俗⒔?b>@Configuration,標(biāo)明了該類是一個(gè)配置類并且會(huì)將該類作為一個(gè)SpringBean添加到IOC容器內(nèi),我們打開該注解的源碼查看如下所示:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.context.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.stereotype.Component;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    String value() default "";
}

可以看到在@Configuration 上聲明式添加了Spring注入注解@Component,也就是解釋了為什么我們配置了@Configuration會(huì)被自動(dòng)添加到IOC容器內(nèi)。

WebMvcConfigurerAdapter該抽象類其實(shí)里面沒有任何的方法實(shí)現(xiàn),只是空實(shí)現(xiàn)了接口WebMvcConfigurer內(nèi)的全部方法,并沒有給出任何的業(yè)務(wù)邏輯處理,這一點(diǎn)設(shè)計(jì)恰到好處的讓我們不必去實(shí)現(xiàn)那些我們不用的方法,都交由WebMvcConfigurerAdapter抽象類空實(shí)現(xiàn),如果我們需要針對(duì)具體的某一個(gè)方法做出邏輯處理,僅僅需要在WebMvcConfigurerAdapter子類中@Override對(duì)應(yīng)方法就可以了。

配置攔截器

在之前Xml配置形式天下的時(shí)候,我們都是在spring-mvc.xml配置文件內(nèi)添加標(biāo)簽配置攔截器。攔截器的相關(guān)創(chuàng)建請(qǐng)?jiān)L問(wèn)第六章:如何在SpringBoot項(xiàng)目中使用攔截器,攔截器配置如下所示:

    /**
     * 攔截器配置
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        super.addInterceptors(registry);
        registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
    }

InterceptorRegistry 內(nèi)的addInterceptor需要一個(gè)實(shí)現(xiàn)HandlerInterceptor接口的攔截器實(shí)例,addPathPatterns方法用于設(shè)置攔截器的過(guò)濾路徑規(guī)則。

配置CORS

跨域我們之前章節(jié)也有講到,請(qǐng)?jiān)L問(wèn)第二十五章:SpringBoot添加支持CORS跨域訪問(wèn),Spring既然為了集成了CROS,那就證明了一點(diǎn),以后前后端分離是一個(gè)開發(fā)趨勢(shì),配置代碼如下所示:

    /**
     * 跨域CORS配置
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        super.addCorsMappings(registry);
        registry.addMapping("/cors/**")
                .allowedHeaders("*")
                .allowedMethods("POST","GET")
                .allowedOrigins("*");
    }
配置ViewController

這一個(gè)配置在之前是經(jīng)常被使用到的,最經(jīng)常用到的就是"/"、"/index"路徑請(qǐng)求時(shí)不通過(guò)@RequestMapping配置,而是直接通過(guò)配置文件映射指定請(qǐng)求路徑到指定View頁(yè)面,當(dāng)然也是在請(qǐng)求目標(biāo)頁(yè)面時(shí)不需要做什么數(shù)據(jù)處理才可以這樣使用,配置內(nèi)容如下所示:

    /**
     * 視圖控制器配置
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        super.addViewControllers(registry);
        registry.addViewController("/").setViewName("/index");
    }
配置ViewResolver

這個(gè)對(duì)我們來(lái)說(shuō)很熟悉,只要我們配置html、Jsp頁(yè)面視圖時(shí)就會(huì)用到InternalResourceViewResolver配置類,然后設(shè)置preffixsuffix參數(shù)進(jìn)行配置視圖文件路徑前綴與后綴。配置代碼如下所示:

    /**
     * 配置請(qǐng)求視圖映射
     * @return
     */
    @Bean
    public InternalResourceViewResolver resourceViewResolver()
    {
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        //請(qǐng)求視圖文件的前綴地址
        internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
        //請(qǐng)求視圖文件的后綴
        internalResourceViewResolver.setSuffix(".jsp");
        return internalResourceViewResolver;
    }

    /**
     * 視圖配置
     * @param registry
     */
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        super.configureViewResolvers(registry);
        registry.viewResolver(resourceViewResolver());
        /*registry.jsp("/WEB-INF/jsp/",".jsp");*/
    }

上述代碼中方法resourceViewResolver上配置了@Bean注解,該注解會(huì)將方法返回值加入到SpringIoc容器內(nèi)。
而在configureViewResolvers方法內(nèi)配置視圖映射為resourceViewResolver方法返回的InternalResourceViewResolver 實(shí)例,這樣完成了視圖的配置。在下面還有注釋掉的一部分代碼,這塊代碼很神奇,我們先來(lái)看看org.springframework.web.servlet.config.annotation.ViewResolverRegistry源碼:

package org.springframework.web.servlet.config.annotation;

public class ViewResolverRegistry {
    ...//省略代碼
    public UrlBasedViewResolverRegistration jsp() {
        return this.jsp("/WEB-INF/", ".jsp");
    }

    public UrlBasedViewResolverRegistration jsp(String prefix, String suffix) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix(prefix);
        resolver.setSuffix(suffix);
        this.viewResolvers.add(resolver);
        return new UrlBasedViewResolverRegistration(resolver);
    }
}
...//省略代碼

可以看到上述源碼中有兩個(gè)jsp方法,而沒有參數(shù)的方法恰恰跟我們配置的內(nèi)容一樣,這一點(diǎn)看來(lái)是Spring早就根據(jù)用戶使用習(xí)慣添加的默認(rèn)配置,同樣也提供了自定義配置Jsp相關(guān)的前綴、后綴內(nèi)容的方法,
方法內(nèi)部同樣是實(shí)例化了一個(gè)InternalResourceViewResolver 視圖映射類,并將實(shí)例添加到了viewResolvers集合內(nèi)。

配置MessageConverter

這個(gè)配置一般針對(duì)于Api接口服務(wù)程序,配置在請(qǐng)求返回時(shí)內(nèi)容采用什么轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換,我們最常用到的就是fastJson的轉(zhuǎn)換,配置如下所示:

/**
     * 消息內(nèi)容轉(zhuǎn)換配置
     * 配置fastJson返回json轉(zhuǎn)換
     * @param converters
     */
    @Override
    public void configureMessageConverters(List> converters) {
        //調(diào)用父類的配置
        super.configureMessageConverters(converters);
        //創(chuàng)建fastJson消息轉(zhuǎn)換器
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        //創(chuàng)建配置類
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //修改配置返回內(nèi)容的過(guò)濾
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.DisableCircularReferenceDetect,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteNullStringAsEmpty
        );
        fastConverter.setFastJsonConfig(fastJsonConfig);
        //將fastjson添加到視圖消息轉(zhuǎn)換器列表內(nèi)
        converters.add(fastConverter);
    }

內(nèi)容轉(zhuǎn)換都是針對(duì)面向接口進(jìn)行編寫的實(shí)現(xiàn)類,都必須implements HttpMessageConverter接口完成方法的實(shí)現(xiàn)。

總結(jié)

以上內(nèi)容就是本章的全部講解內(nèi)容,本章主要講解了采用JavaBean配置的形式代替?zhèn)鹘y(tǒng)的Xml配置文件的形式進(jìn)行多種配置聲明,根據(jù)源碼我們可見到Spring在多年被使用的過(guò)程中不斷的提供一些默認(rèn)配置,從而達(dá)到用于預(yù)計(jì)的效果并提高了開發(fā)效率。

本章代碼已經(jīng)上傳到碼云:
網(wǎng)頁(yè)地址:http://git.oschina.net/jnyqy/lessons
Git地址:https://git.oschina.net/jnyqy/lessons.git
SpringBoot相關(guān)系列文章請(qǐng)?jiān)L問(wèn):目錄:SpringBoot學(xué)習(xí)目錄
QueryDSL相關(guān)系列文章請(qǐng)?jiān)L問(wèn):QueryDSL通用查詢框架學(xué)習(xí)目錄
SpringDataJPA相關(guān)系列文章請(qǐng)?jiān)L問(wèn):目錄:SpringDataJPA學(xué)習(xí)目錄
感謝閱讀!
歡迎加入QQ技術(shù)交流群,共同進(jìn)步。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67634.html

相關(guān)文章

  • 三十六章:基于SpringBoot架構(gòu)重寫SpringMVC請(qǐng)求參數(shù)裝載

    摘要:本章目標(biāo)根據(jù)項(xiàng)目定制參數(shù)狀態(tài)并了解的裝載過(guò)程以及實(shí)現(xiàn)方式。創(chuàng)建測(cè)試控制器創(chuàng)建名為的控制器并添加數(shù)據(jù)提交的方法,具體代碼如下所示表單提交控制器恒宇少年碼云裝載參數(shù)測(cè)試教師名稱, 在國(guó)內(nèi)企業(yè)開發(fā)項(xiàng)目中大多數(shù)都已經(jīng)偏向Spring家族式的開發(fā)風(fēng)格,在前幾年國(guó)內(nèi)項(xiàng)目都是以Structs2作為Web開發(fā)的主導(dǎo),不過(guò)由于近幾年發(fā)生的事情確實(shí)讓開發(fā)者對(duì)它失去了以往的信心。與此同時(shí)Spring家族發(fā)布...

    Ali_ 評(píng)論0 收藏0
  • springboot學(xué)習(xí)(二)——springmvc配置使用

    摘要:中添加攔截器配置如下攔截所有請(qǐng)求,也就是,只攔截開頭的請(qǐng)求。在中并沒有提供配置文件的方式來(lái)配置攔截器,因此需要使用的代碼式配置,配置如下這個(gè)屬性通常并不需要手動(dòng)配置,高版本的會(huì)自動(dòng)檢測(cè)第四點(diǎn)講下靜態(tài)資源映射。 以下內(nèi)容,如有問(wèn)題,煩請(qǐng)指出,謝謝 上一篇講解了springboot的helloworld部分,這一篇開始講解如何使用springboot進(jìn)行實(shí)際的應(yīng)用開發(fā),基本上尋著sprin...

    hiyayiji 評(píng)論0 收藏0
  • #yyds干貨盤點(diǎn)#安全管理制度管理辦法范文

    摘要:第四章安全管理制度發(fā)布第十條安全管理制度必須以正式文件的形式發(fā)布施行。第十一條安全管理制度由信息安全管理小組制訂,信息安全領(lǐng)導(dǎo)小組審批發(fā)布。第二十條安全管理制度的修改與廢止須經(jīng)信息安全領(lǐng)導(dǎo)組織審批確認(rèn),信息安全管理部門備案。 字?jǐn)?shù) 3610閱讀 760評(píng)論 0贊 3《xxxx安全管理制度匯編》****制度管理辦法****文...

    duan199226 評(píng)論0 收藏0
  • 全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)Python(2021年9月)備考筆記 第十二天

    摘要:本題目的考察點(diǎn)在于函數(shù)的格式輸出規(guī)則。方法改變隨機(jī)數(shù)生成器的種子,可以在調(diào)用其他隨機(jī)模塊函數(shù)之前調(diào)用此函數(shù)。參數(shù)改變隨機(jī)數(shù)生成器的種子。返回一個(gè)至區(qū)間包含和的整數(shù)。 ...

    Codeing_ls 評(píng)論0 收藏0
  • 三十五章:SpringBoot與單元測(cè)試的小秘密

    摘要:本章目的基于平臺(tái)整合分別完成客戶端服務(wù)端的單元測(cè)試。在測(cè)試控制器內(nèi)添加了三個(gè)測(cè)試方法,我們接下來(lái)開始編寫單元測(cè)試代碼。總結(jié)本章主要介紹了基于平臺(tái)的兩種單元測(cè)試方式,一種是在服務(wù)端采用注入方式將需要測(cè)試的或者注入到測(cè)試類中,然后調(diào)用方法即可。 單元測(cè)試對(duì)于開發(fā)人員來(lái)說(shuō)是非常熟悉的,我們每天的工作也都是圍繞著開發(fā)與測(cè)試進(jìn)行的,在最早的時(shí)候測(cè)試都是采用工具Debug模式進(jìn)行調(diào)試程序,后來(lái)Ju...

    hikui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<