摘要:本章目標(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配置文件如下所示:
...//省略WebMvcConfigurerAdapter實(shí)現(xiàn)類...//省略 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-test test
我們創(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)添加
/** * 攔截器配置 * @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è)置preffix、suffix參數(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)。
這個(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
摘要:本章目標(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ā)布...
摘要:中添加攔截器配置如下攔截所有請(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...
摘要:第四章安全管理制度發(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安全管理制度匯編》****制度管理辦法****文...
摘要:本題目的考察點(diǎn)在于函數(shù)的格式輸出規(guī)則。方法改變隨機(jī)數(shù)生成器的種子,可以在調(diào)用其他隨機(jī)模塊函數(shù)之前調(diào)用此函數(shù)。參數(shù)改變隨機(jī)數(shù)生成器的種子。返回一個(gè)至區(qū)間包含和的整數(shù)。 ...
摘要:本章目的基于平臺(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...
閱讀 3048·2021-11-25 09:43
閱讀 1027·2021-11-24 10:22
閱讀 1353·2021-09-22 15:26
閱讀 681·2019-08-30 15:44
閱讀 2463·2019-08-29 16:33
閱讀 3684·2019-08-26 18:42
閱讀 908·2019-08-23 18:07
閱讀 1832·2019-08-23 17:55