摘要:本章目標繼承采用形式實現個性化配置定制。本章代碼已經上傳到碼云網頁地址地址相關系列文章請訪問目錄學習目錄相關系列文章請訪問通用查詢框架學習目錄相關系列文章請訪問目錄學習目錄感謝閱讀歡迎加入技術交流群,共同進步。
WebMvcConfigurerAdapter配置類其實是Spring內部的一種配置方式,采用JavaBean的形式來代替?zhèn)鹘y(tǒng)的xml配置文件形式進行針對框架個性化定制,下面我們來看一下該類內的常用方法。
本章目標繼承WebMvcConfigurerAdapter采用JavaBean形式實現個性化配置定制。
構建項目本章內容同樣不涉及到業(yè)務邏輯,我們創(chuàng)建一個web項目即可,pom.xml配置文件如下所示:
...//省略WebMvcConfigurerAdapter實現類...//省略 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-test test
我們創(chuàng)建一個配置實體類型,并繼承WebMvcConfigurerAdapter,代碼如下所示:
package com.yuqiyu.chapter34; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.*; import java.util.List; /** * 自定義配置類實現JavaBean注解形式配置 * ======================== * Created with IntelliJ IDEA. * User:恒宇少年 * Date:2017/9/3 * Time:21:48 * 碼云:http://git.oschina.net/jnyqy * ======================== */ @Configuration public class WebConfiguration extends WebMvcConfigurerAdapter { }
我們在配置類上添加了注解@Configuration,標明了該類是一個配置類并且會將該類作為一個SpringBean添加到IOC容器內,我們打開該注解的源碼查看如下所示:
// // 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會被自動添加到IOC容器內。
WebMvcConfigurerAdapter該抽象類其實里面沒有任何的方法實現,只是空實現了接口WebMvcConfigurer內的全部方法,并沒有給出任何的業(yè)務邏輯處理,這一點設計恰到好處的讓我們不必去實現那些我們不用的方法,都交由WebMvcConfigurerAdapter抽象類空實現,如果我們需要針對具體的某一個方法做出邏輯處理,僅僅需要在WebMvcConfigurerAdapter子類中@Override對應方法就可以了。
配置攔截器在之前Xml配置形式天下的時候,我們都是在spring-mvc.xml配置文件內添加
/** * 攔截器配置 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { super.addInterceptors(registry); registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**"); }
InterceptorRegistry 內的addInterceptor需要一個實現HandlerInterceptor接口的攔截器實例,addPathPatterns方法用于設置攔截器的過濾路徑規(guī)則。
配置CORS跨域我們之前章節(jié)也有講到,請訪問第二十五章:SpringBoot添加支持CORS跨域訪問,Spring既然為了集成了CROS,那就證明了一點,以后前后端分離是一個開發(fā)趨勢,配置代碼如下所示:
/** * 跨域CORS配置 * @param registry */ @Override public void addCorsMappings(CorsRegistry registry) { super.addCorsMappings(registry); registry.addMapping("/cors/**") .allowedHeaders("*") .allowedMethods("POST","GET") .allowedOrigins("*"); }配置ViewController
這一個配置在之前是經常被使用到的,最經常用到的就是"/"、"/index"路徑請求時不通過@RequestMapping配置,而是直接通過配置文件映射指定請求路徑到指定View頁面,當然也是在請求目標頁面時不需要做什么數據處理才可以這樣使用,配置內容如下所示:
/** * 視圖控制器配置 * @param registry */ @Override public void addViewControllers(ViewControllerRegistry registry) { super.addViewControllers(registry); registry.addViewController("/").setViewName("/index"); }配置ViewResolver
這個對我們來說很熟悉,只要我們配置html、Jsp頁面視圖時就會用到InternalResourceViewResolver配置類,然后設置preffix、suffix參數進行配置視圖文件路徑前綴與后綴。配置代碼如下所示:
/** * 配置請求視圖映射 * @return */ @Bean public InternalResourceViewResolver resourceViewResolver() { InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver(); //請求視圖文件的前綴地址 internalResourceViewResolver.setPrefix("/WEB-INF/jsp/"); //請求視圖文件的后綴 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注解,該注解會將方法返回值加入到SpringIoc容器內。
而在configureViewResolvers方法內配置視圖映射為resourceViewResolver方法返回的InternalResourceViewResolver 實例,這樣完成了視圖的配置。在下面還有注釋掉的一部分代碼,這塊代碼很神奇,我們先來看看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); } } ...//省略代碼
可以看到上述源碼中有兩個jsp方法,而沒有參數的方法恰恰跟我們配置的內容一樣,這一點看來是Spring早就根據用戶使用習慣添加的默認配置,同樣也提供了自定義配置Jsp相關的前綴、后綴內容的方法,
方法內部同樣是實例化了一個InternalResourceViewResolver 視圖映射類,并將實例添加到了viewResolvers集合內。
這個配置一般針對于Api接口服務程序,配置在請求返回時內容采用什么轉換器進行轉換,我們最常用到的就是fastJson的轉換,配置如下所示:
/** * 消息內容轉換配置 * 配置fastJson返回json轉換 * @param converters */ @Override public void configureMessageConverters(List> converters) { //調用父類的配置 super.configureMessageConverters(converters); //創(chuàng)建fastJson消息轉換器 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); //創(chuàng)建配置類 FastJsonConfig fastJsonConfig = new FastJsonConfig(); //修改配置返回內容的過濾 fastJsonConfig.setSerializerFeatures( SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty ); fastConverter.setFastJsonConfig(fastJsonConfig); //將fastjson添加到視圖消息轉換器列表內 converters.add(fastConverter); }
內容轉換都是針對面向接口進行編寫的實現類,都必須implements HttpMessageConverter接口完成方法的實現。
總結以上內容就是本章的全部講解內容,本章主要講解了采用JavaBean配置的形式代替?zhèn)鹘y(tǒng)的Xml配置文件的形式進行多種配置聲明,根據源碼我們可見到Spring在多年被使用的過程中不斷的提供一些默認配置,從而達到用于預計的效果并提高了開發(fā)效率。
本章代碼已經上傳到碼云:
網頁地址:http://git.oschina.net/jnyqy/lessons
Git地址:https://git.oschina.net/jnyqy/lessons.git
SpringBoot相關系列文章請訪問:目錄:SpringBoot學習目錄
QueryDSL相關系列文章請訪問:QueryDSL通用查詢框架學習目錄
SpringDataJPA相關系列文章請訪問:目錄:SpringDataJPA學習目錄
感謝閱讀!
歡迎加入QQ技術交流群,共同進步。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/67634.html
摘要:本章目標根據項目定制參數狀態(tài)并了解的裝載過程以及實現方式。創(chuàng)建測試控制器創(chuàng)建名為的控制器并添加數據提交的方法,具體代碼如下所示表單提交控制器恒宇少年碼云裝載參數測試教師名稱, 在國內企業(yè)開發(fā)項目中大多數都已經偏向Spring家族式的開發(fā)風格,在前幾年國內項目都是以Structs2作為Web開發(fā)的主導,不過由于近幾年發(fā)生的事情確實讓開發(fā)者對它失去了以往的信心。與此同時Spring家族發(fā)布...
摘要:中添加攔截器配置如下攔截所有請求,也就是,只攔截開頭的請求。在中并沒有提供配置文件的方式來配置攔截器,因此需要使用的代碼式配置,配置如下這個屬性通常并不需要手動配置,高版本的會自動檢測第四點講下靜態(tài)資源映射。 以下內容,如有問題,煩請指出,謝謝 上一篇講解了springboot的helloworld部分,這一篇開始講解如何使用springboot進行實際的應用開發(fā),基本上尋著sprin...
摘要:第四章安全管理制度發(fā)布第十條安全管理制度必須以正式文件的形式發(fā)布施行。第十一條安全管理制度由信息安全管理小組制訂,信息安全領導小組審批發(fā)布。第二十條安全管理制度的修改與廢止須經信息安全領導組織審批確認,信息安全管理部門備案。 字數 3610閱讀 760評論 0贊 3《xxxx安全管理制度匯編》****制度管理辦法****文...
摘要:本題目的考察點在于函數的格式輸出規(guī)則。方法改變隨機數生成器的種子,可以在調用其他隨機模塊函數之前調用此函數。參數改變隨機數生成器的種子。返回一個至區(qū)間包含和的整數。 ...
摘要:本章目的基于平臺整合分別完成客戶端服務端的單元測試。在測試控制器內添加了三個測試方法,我們接下來開始編寫單元測試代碼。總結本章主要介紹了基于平臺的兩種單元測試方式,一種是在服務端采用注入方式將需要測試的或者注入到測試類中,然后調用方法即可。 單元測試對于開發(fā)人員來說是非常熟悉的,我們每天的工作也都是圍繞著開發(fā)與測試進行的,在最早的時候測試都是采用工具Debug模式進行調試程序,后來Ju...
閱讀 3067·2021-11-25 09:43
閱讀 1042·2021-11-24 10:22
閱讀 1372·2021-09-22 15:26
閱讀 697·2019-08-30 15:44
閱讀 2475·2019-08-29 16:33
閱讀 3715·2019-08-26 18:42
閱讀 929·2019-08-23 18:07
閱讀 1845·2019-08-23 17:55