javaWeb框架Spring Boot API 版本許可權控制
Spring Boot API 版本許可權控制
之前有文章講述在Spring MVC 中擴展 RequestMappingHandlerMapping 實現對版本的控制。
但是在真正使用過程中不是很理想化,因為其需要替換掉WebMvcConfigurationSupport,替換後後,會將其提供的一系列默認組件全部移除。如我們註冊攔截器使用的(RequestMappingHandlerAdapter)、全局異常攔截(ExceptionHandlerExceptionResolver)等。
本文以Spring Boot 為例,解決這個問題。
Spring Boot RequestMappingHandlerMapping
自動配置時序圖
由上圖則可以清晰看到,關鍵點在於是否存在WebMvcRegistrations。
進入WebMvcRegistrations發現其介面下提供了WebMvcRegistrationsAdapter轉換器,可以輕鬆擴展我們所需的RequestMappingHandlerMapping,實現版本控制。
自動配置RequestMappingHandlerMapping源碼分析
判斷是否存在WebMvcConfigurationSupport
Spring Boot 首先載入WebMvcAutoConfiguration
上圖可以看到使用註解ConditionalOnMissingBean判斷是否存在WebMvcConfigurationSupport,如果不存在,則該類不會注入,故如果我們直接繼承WebMvcConfigurationSupport,則會導致整個全部配置失效。
* ps: SpringBoot的自動配置原理基本都是基於此類註解。*
引入WebMvc配置
上圖可看到通過@Import註解引入了EnableWebMvcConfiguration,點擊進入該類可看到存在的構造方法中引入了WebMvcRegistrations。該類為WebMvcAutoConfiguration的內部類
如何注入RequestMappingHandlerMapping
由上圖可發現EnableWebMvcConfiguration類中注入了RequestMappingHandlerMapping。其調用父類requestMappingHandlerMapping
方法生成RequestMappingHandlerMapping。跟蹤父類可發現:
調用方法,創建了RequestMappingHandlerMapping,跟下去:
發現其有子類,點擊左側箭頭查看:
發現回到了WebMvcAutoConfiguration中的EnableWebMvcConfiguration類。
其通過判斷mvcRegistrations是否存在以及mvcRegistrations是否擴展RequestMappingHandlerMapping 來選擇使用默認還是我們自定義的RequestMappingHandlerMapping 。
如何擴展
創建一個類,繼承WebMvcRegistrationsAdapter,重寫getRequestMappingHandlerMapping,返回自定義RequestMappingHandlerMapping即可。
其類是WebMvcRegistrations方便對外擴展提供的轉換器類,可以點進去看一下,默認全部返回null。
附上版本控制全部代碼


※簡潔的Java8-java8新特性詳解 編程語言
※Linux內核頁面換入換出
※C++實現稀疏矩陣的壓縮存儲
※Linux系統CPU的性能監控及調優
TAG:青峰科技 |
※新版本Google Play拋棄對Android Ice Cream Sandwich支持
※The Shoe Surgeon 打造 Air Jordan 3「JTH」全新「Black Cement」定製版本
※IBM Cloud Private for Data 最新發布 Cloud Native 版本
※Virgil Abloh 確認 Nike Blazer Studio Mid「The Ten」將推出黑色版本
※#Xsneaker新聞#Air Jordan 1「Shattered Backboard」或將推出限量 Satin 版本
※Jeff Staple 曝光 Nike Dunk SB「Black Pigeon」高筒版本
※新版本 Nike Air Presto「The Ten」諜照曝光,設計師使用 Supreme 單品打造沙發 | HB Daily
※Converse Chuck Taylor All Star Hi 推出全新 GORE-TEX 版本
※Virgil Abloh x Nike Air Presto「The Ten」2.0 版本實物諜照曝光
※Virgil Abloh x Nike Air VaporMax「The Ten」全新黑色版本
※Hot Toys 最新《Avengers: Infinity War》版本 Doctor Strange 珍藏人偶登場
※BiYong ios版本已上線海外版Apple Store
※Sean Wotherspoon又聯名了!粉色版本Virgil Abloh x NikeLab?
※The Remade 打造 Vans Sk8-Hi「Revenge X Storm & Off-White」客製版本
※Oracle應用管理云:IMCS添加不同版本Weblogic entity的區別
※Hot Toys 推出《Avengers: Age of Ultron》升級版本 Hulkbuster 珍藏人偶
※Facebook Lite 正在測試 iOS 版本
※近賞 Nike Air Max 97「Metallic Gold」之 Swarovski 水晶定製版本
※藝術家 Daniel Jacob 打造 Air Jordan 1「Chicago」水晶定製版本
※iOSbeta7中,beta版本才有的APP Feedback消失了