iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
Software Development

我在 Spring Boot 3 裡面挖呀挖呀挖系列 第 24

Day23 - Switch off the Default MVC Configuration

  • 分享至 

  • xImage
  •  

Day23 - Switch off the Default MVC Configuration

前言

Spring Boot提供很好的Spring MVC自動配置,我們可以無腦直接拿來用,當然也可以自己加一些想要使用的組件,但也有可能你會想要全部自己來,那麼要怎麼才可以改為全手動配置呢,今日我們來談談

專案建立

https://ithelp.ithome.com.tw/upload/images/20231009/20128084oDvTxpsRix.png
https://ithelp.ithome.com.tw/upload/images/20231009/2012808481UjTwUB1M.png

Switch off the Default MVC Configuration

WebMvcAutoConfiguration配置的組件

  1. 支持RESTful的filter:HiddenHttpMethodFilter
  2. 支持非POST請求,請求體攜帶數據:FormContentFilter
  3. EnableWebMvcConfiguration
    • RequestMappingHandlerAdapter請求映射處理適配器
    • WelcomePageHandlerMapping: 歡迎頁功能支持(模板引擎目錄、靜態資源目錄放index.html),項目訪問页面.
    • RequestMappingHandlerMapping:找每個請求處理映射關係
    • ExceptionHandlerExceptionResolver:dafault的異常解析器
    • LocaleResolver:國際化解析器
    • ThemeResolver:主題解析器
    • FlashMapManager:臨時數據共享
    • FormattingConversionService: 數據格式化、類型轉化
    • Validator: 數據校驗JSR303提供的數據校驗功能
    • WebBindingInitializer:請求參數的封裝與綁定
    • ContentNegotiationManager:内容協商管理器
  4. WebMvcAutoConfigurationAdapter配置生效,它是一个WebMvcConfigurer,定義MVC底層組件
    • 定義 WebMvcConfigurer 底層組件默認功能;所有功能詳見如下
    • 視圖解析器:InternalResourceViewResolver
    • 視圖解析器:BeanNameViewResolver,視圖名(controller方法的返回值字符串)就是組件名
    • 内容協商解析器:ContentNegotiatingViewResolver
    • 请求上下文過濾器:RequestContextFilter: 任意位置直接獲取当前请求
    • 靜態資源鏈規則
    • ProblemDetailsExceptionHandler:錯誤詳情
    • SpringMVC内部場景異常被它捕獲:
    • 定義了MVC default的底層行為: WebMvcConfigurer

WebMvcConfigurer功能

https://ithelp.ithome.com.tw/upload/images/20231009/20128084z32MslOgTa.png
https://ithelp.ithome.com.tw/upload/images/20231009/201280843LohJ8Skxr.png
https://ithelp.ithome.com.tw/upload/images/20231009/20128084YzrrmxeUL9.png
day22_webmvcconfigurer_01
day22_webmvcconfigurer_02
day22_webmvcconfigurer_03

Switch off the Default Configuration

  • 建立配置類標註@EnableWebMvc

@Configuration
@EnableWebMvc
public class MySpringMvcConfiguration{
    //...
}

  • 原理
    • WebMvcAutoConfiguration:Spring Boot提供的AutoConfiguration上方有標註
    @ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
    
    • @EnableWebMvc它會幫你導入
    @Import({DelegatingWebMvcConfiguration.class})
    
    • DelegatingWebMvcConfiguration它又繼承WebMvcConfigurationSupport
      https://ithelp.ithome.com.tw/upload/images/20231009/20128084hb8U20eItf.png

Reference


上一篇
Day22 - Embedded Web Servers
下一篇
Day24 - Problem Details
系列文
我在 Spring Boot 3 裡面挖呀挖呀挖31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言