SpringMvc定制化深入探究原理
一、SpringBoot 自動(dòng)配置套路
引入場(chǎng)景 starter —— xxxxAutoConfiguration —— 導(dǎo)入 xxxx組件 —— 綁定 xxxxProperties —— 綁定配置文件項(xiàng)
因此,需要修改時(shí)只需要修改配置文件項(xiàng)
二、定制化常見方式
使用 @Bean + 編寫自定義配置類 ,增加或替換容器中的一些組件 (常用)
修改配置文件
使用定制化器 —— xxxxCustomizer
編寫配置類, 實(shí)現(xiàn) WebMvcConfigurer 接口,定制化 web 功能 (常用)
@EnableWebMvc + 實(shí)現(xiàn) WebMvcConfigurer 接口 ,全面接管 SpringMvc,所有 SpringBoot 默認(rèn)規(guī)則失效 (慎用)
@EnableWebMvc 原理
- WebMvcAutoConfiguration 中有全部 SpringMvc 默認(rèn)自動(dòng)配置功能類(靜態(tài)資源、歡迎頁(yè)…)
- 一旦使用 @EnableWebMvc ,其是一復(fù)合注釋,導(dǎo)入 DelegatingWebMvcConfiguration 類
@Import({<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->DelegatingWebMvcConfiguration.class})DelegatingWebMvcConfiguration.class 只保證 SpringMvc 最底層的使用,其作用如下
(1)把系統(tǒng)中的所有 WebMvcConfigurer 拿過來(lái),無(wú)論有多少 Configurer 都是這些 Configurer 合起來(lái)一起生效
(2)@EnableWebMvc 自動(dòng)配置了一些最底層的組件(RequestMappingHandlerMapping …),這些組件依賴的組件都是從容器中獲取
WebMvcAutoConfiguration 生效的條件為容器中沒有 WebMvcConfigurationSupport.class這個(gè)組件(這個(gè)組件在DelegatingWebMvcConfiguration 中,DelegatingWebMvcConfiguration 在 EnableWebMvc 中)
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
因此,使用 @EnableWebMvc 后,所有的自動(dòng)配置規(guī)則都失效,慎用 ?。?!
三、使用 @EnableWebMvc 案例
如下為 @EnableWebMvc 全面接管下,需自定義靜態(tài)資源訪問路徑代碼示例,不止是這個(gè)行為需要自定義,其他自動(dòng)配置的行為全部需要自定義,因此要慎用
@Configuration
@EnableWebMvc // 完全控制 SpringMvc , 全面接管 —— 謹(jǐn)慎使用
// 全面接管含義: SpringBoot 官方列舉的自動(dòng)配置,全部失效,必須自定義行為
public class AdminWebConfig implements WebMvcConfigurer {
// 全面接管下,定義靜態(tài)資源行為
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 訪問 a 路徑下的所有請(qǐng)求,都去 static 文件夾下尋找
registry.addResourceHandler("/a/**").addResourceLocations("classpath:/static/");
}
}到此這篇關(guān)于SpringMvc定制化深入探究原理的文章就介紹到這了,更多相關(guān)SpringMvc定制化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring中自定義數(shù)據(jù)類型轉(zhuǎn)換的方法詳解
Spring3引入了一個(gè)core.onvert包,提供一個(gè)通用類型轉(zhuǎn)換系統(tǒng)。在Spring容器中,可以使用這個(gè)系統(tǒng)作為PropertyEditor實(shí)現(xiàn)的替代,將外部化的bean屬性值字符串轉(zhuǎn)換為所需的屬性類型。本文將詳解這一系統(tǒng)的使用方法,需要的可以參考一下2022-06-06
解決SpringBoot在后臺(tái)接收前臺(tái)傳遞對(duì)象方式的問題
這篇文章主要介紹了解決SpringBoot在后臺(tái)接收前臺(tái)傳遞對(duì)象方式的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2021-01-01
Spring Boot如何動(dòng)態(tài)創(chuàng)建Bean示例代碼
這篇文章主要給大家介紹了關(guān)于Spring Boot如何動(dòng)態(tài)創(chuàng)建Bean的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
Java中IO流的BufferedOutputStream和FileOutputStream對(duì)比
這篇文章主要介紹了Java中IO流的BufferedOutputStream和FileOutputStream對(duì)比,不帶緩沖的操作,每讀一個(gè)字節(jié)就要寫入一個(gè)字節(jié),由于涉及磁盤的IO操作相比內(nèi)存的操作要慢很多,所以在讀寫的字節(jié)比較少的情況下,效率比較低,需要的朋友可以參考下2023-07-07
Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問題
這篇文章主要介紹了Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Java Socket編程筆記_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Socket對(duì)于我們來(lái)說(shuō)就非常實(shí)用了。下面是本次學(xué)習(xí)的筆記。主要分異常類型、交互原理、Socket、ServerSocket、多線程這幾個(gè)方面闡述2017-05-05
Spring Boot應(yīng)用的極速部署腳本示例代碼
最近在工作中遇到了一個(gè)問題,需要極速的部署Spring Boot應(yīng)用,發(fā)現(xiàn)網(wǎng)上這方面的資料較少,所以自己來(lái)總結(jié)下,這篇文章主要給大家介紹了關(guān)于Spring Boot應(yīng)用的極速部署腳本的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08
Spring Boot 與 Kotlin 使用Redis數(shù)據(jù)庫(kù)的配置方法
Redis是目前業(yè)界使用最廣泛的內(nèi)存數(shù)據(jù)存儲(chǔ)。下面通過本文給大家介紹Spring Boot 與 Kotlin 使用Redis數(shù)據(jù)庫(kù)的配置方法,感興趣的朋友一起看看吧2018-01-01

