SpringMvc定制化深入探究原理
一、SpringBoot 自動配置套路
引入場景 starter —— xxxxAutoConfiguration —— 導入 xxxx組件 —— 綁定 xxxxProperties —— 綁定配置文件項
因此,需要修改時只需要修改配置文件項
二、定制化常見方式
使用 @Bean + 編寫自定義配置類 ,增加或替換容器中的一些組件 (常用)
修改配置文件
使用定制化器 —— xxxxCustomizer
編寫配置類, 實現(xiàn) WebMvcConfigurer 接口,定制化 web 功能 (常用)
@EnableWebMvc + 實現(xiàn) WebMvcConfigurer 接口 ,全面接管 SpringMvc,所有 SpringBoot 默認規(guī)則失效 (慎用)
@EnableWebMvc 原理
- WebMvcAutoConfiguration 中有全部 SpringMvc 默認自動配置功能類(靜態(tài)資源、歡迎頁…)
- 一旦使用 @EnableWebMvc ,其是一復合注釋,導入 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 , 全面接管 —— 謹慎使用
// 全面接管含義: SpringBoot 官方列舉的自動配置,全部失效,必須自定義行為
public class AdminWebConfig implements WebMvcConfigurer {
// 全面接管下,定義靜態(tài)資源行為
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 訪問 a 路徑下的所有請求,都去 static 文件夾下尋找
registry.addResourceHandler("/a/**").addResourceLocations("classpath:/static/");
}
}到此這篇關于SpringMvc定制化深入探究原理的文章就介紹到這了,更多相關SpringMvc定制化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
k8s部署springboot實現(xiàn)前后端分離項目
本文主要介紹了k8s部署springboot實現(xiàn)前后端分離項目,主要包括配置文件、鏡像構建和容器編排等方面,具有一定的參考價值,感興趣的可以了解一下2024-01-01
Spring Boot實戰(zhàn)之靜態(tài)資源處理
這篇文章主要介紹了Spring Boot實戰(zhàn)之靜態(tài)資源處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
Maven是什么?Maven的概念+作用+倉庫的介紹+常用命令的詳解
Maven是一個項目管理工具,它包含了一個對象模型。一組標準集合,一個依賴管理系統(tǒng)。和用來運行定義在生命周期階段中插件目標和邏輯.,本文給大家介紹Maven的概念+作用+倉庫的介紹+常用命令,感興趣的的朋友跟隨小編一起看看吧2020-09-09
聊聊spring @Transactional 事務無法使用的可能原因
這篇文章主要介紹了spring @Transactional 事務無法使用的可能原因,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java 基于Jakarta Mail實現(xiàn)收發(fā)郵件
這篇文章主要介紹了Java 基于Jakarta Mail實現(xiàn)收發(fā)郵件的功能,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下2021-04-04
java使用FuncGPT慧函數(shù)對Mybatis進行一對一查詢映射處理
這篇文章主要介紹了java使用FuncGPT慧函數(shù)對Mybatis進行一對一查詢映射處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
java在linux本地執(zhí)行shell命令的實現(xiàn)方法
本文主要介紹了java在linux本地執(zhí)行shell命令的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

