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