一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot Web 應用源碼解析:綜合實戰和整體總結

SpringBoot Web 應用源碼解析:綜合實戰和整體總結

2020-10-31 00:25今日頭條程序員高級碼農 Java教程

本文將基于對前端模板框架 Thymeleaf 的集成,逐步向大家演示如何自定義 ViewResolver以及如何進一步 擴展 Spring MVC 配置。

綜合實戰

關于 Web 方面的配置比較多,值得慶幸的是,Spring Boot 已經幫我們預置初始化了很多基礎組件。但在實踐的過程中,某些基礎的組件并不能滿足我們的實際需求,這時就需要我們重新初始化相應組件,甚至在某些極端的情況下需要完全接管 Spring Boot 的默認配置。

本文將基于對前端模板框架 Thymeleaf 的集成,逐步向大家演示如何自定義 ViewResolver以及如何進一步 擴展 Spring MVC 配置。本實例涉及集成 Thymeleaf、自定義初始化ThymeleafViewResolver 以及擴展 Spring MVC。

SpringBoot Web 應用源碼解析:綜合實戰和整體總結

Thymeleaf 是一個 Java 類庫,能夠處理 HTML/HTML5、XML、JavaScript、CSS, 甚至純文本類型的文件。通常可以用作MVC中的View層,它可以完全替代 JSP。該框架是SpringBoot 首推的前端展示框架。

首先我們創建一個集成 Thymeleaf 的 SpringBootWeb 項目。集成 Thymeleaf 的核心操作就是引入對應的 starter,對應項目中 pom.xml 的依賴如下。

<dependency> 

<groupId>org. springframework. boot</groupId> 

<artifactId>spring- boot- starter-thymeleaf</ artifactId> 

< /dependency> 

<groupId>org. springframework . boot</groupId> 

<artifactId>spring- boot - starter - web</artifactId> 

</ dependency> 

通過前面的學習我們已經得知引入該 starter 之后,Spring Boot 便會進行一個初始化的基本配置,因此針對 Thymeleaf 的最簡單集成便完成了,關于頁面展示和基礎配置我們暫時先不考慮。當集成 Thymeleaf 之后,Thymeleaf 對應的自動配置類 ThymeleafAutoConfiguration 中會初始化一個 ThymeleafViewResolver, 用來對 Thymeleaf 的頁面進行解析和渲染。這一操作本質上同默認的 BeanNameViewResolver 作用-樣,都實現了 ViewResolver 接口。

此時,如果官方提供的 ThymeleafViewResolver 的默認設 置無法滿足我們的需求,可以通過 兩 種 途 徑 進 行 自 定 義 設 置 : 通 過 application 配 置 文 件 配 置 和 自 行 創 建ThymeleafViewResolver 對象。

通過 application 配置對應的屬性定義位于 ThymeleafProperties 類中,我們已經做過多次類似的配置,不再贅述。

我們可以通過以下方式自行創建 ThymeleafViewResolver 對象。先定義一個配置類ViewResolverConfig,并在類內部通過@Bean 注解對實例化的 ThymeleafViewResolver對象進行注入容器的操作。

@Configuration

public class ViewResolverConfig { 

@Bean

public ThymeleafViewResolver thymeleafViewResolver() { 

Thyme leafViewResolver resolver = new ThymeleafViewResolver(); 

//設置 ViewResolver 對應的屬性 值

resolver. setCharacterEncoding("UTF-8"); 

resolver. setCache(false); 

return resolver; 

@Bean 默 認 會 將 方 法 thymeleafViewResolver 作 為 Bean 的 key, 將 返 回 的Thymeleaf-ViewResolver 對 象 作 為 Value 存 入 容 器 當 中 。 在 方 法 內 部 , 可 通 過ThymeleafViewResolver 對應的方法進行屬性的初始化設置。通過以上代碼我們便完成了自定義 Thymeleaf-ViewResolver 的注入。

那么,原來默認的 ThymeleafViewResolver 會怎么處理呢? 我們知道幾乎所有的自動配置類都是通過注解設置初始化條件的,比如 ThymeleafViewResolver 默認實例化的條件是當容器中不存在名稱為 thymeleafViewResolver 時才會使用默認的初始化。當自定義的ThymeleafViewResolver 類完成初始化之后,默認配置的初始化條件便不再滿足了。

上面針對 SpringMVC 中 Thymeleaf 的 ViewResolver 的自定義進行了講解。

其實在 Spring Boot 中,大多數組件都可以采用同樣的方式對默認配置進行覆蓋。除了上述方法,在 Spring Boot 項目中還可以通過實現 WebMvcConfigurer 接口來進行更靈活地自定義配置。

通過 WebMvcConfigurer 接口實現自定義配置是 Spring 內部的一-種配置方式,它替代了傳統的 XML 形式的配置。通過對該接口具體方法的實現,可以自定義一些 Handler、Interceptor 、ViewResolver 、MessageConverter 等參 數 。 以 上 面 配 置ThymeleafViewResolver 為例,我們也可以通過實現該接口的 configureViewResolvers 方法來進行配置,達到同樣的效果,具體示例代碼如下:

@Configuration

public class MyMvcConfig implements WebMvcConfigurer { 

@Override

public void configureViewResolvers (ViewResolverRegistry registry) { 

Thyme leafViewResolver resolver = new ThymeleafViewResolver(); 

//設置 ViewResolver 對應的屬 性值

resolver. setCharacterEncoding("UTF-8"); 

resolver . setCache(false); 

registry . viewResolver(resolver); 

使用 WebMvcConfigurer 接口時需注意 Spring Boot 版本,以上代碼是基于 Spring Boot 2.0以后的版本。WebMvcConfigurer 接口還提供 了其他關于擴展 SpringMVC 配置的接口,使用方法與上述示例基本一樣,大家可以查閱對應的代碼進一步了解, 這里就不再逐一舉例了。

SpringBoot Web 應用源碼解析:綜合實戰和整體總結

最后,關于 SpringMVC 自定義配置的最徹底操作就是完全接管 SpringBoot 關于 SpringMVC的默認配置,具體操作就是在 WebMvcConfigurer 的實現類上使用@EnableWebMvc 注解,示例如下。

@EnableWebMvc

@Configuration

public class MyMvcConfig implements WebMvcConfigurer {

使用該注解等于擴展了 WebMvcConfigurationSupport,但是沒有重寫任何方法,因此所需的功能都需要開發人員自行實現。-般情況下不推薦使用這種方式,該方式更適合基于 SpringBoot 提供的默認配置,針對特別需求進行有針對性拓展的場景。

其實,本節內容的重點并不只是讓大家學會簡單的 Web 自定義配置,更深的用意是希望大家了解在 Spring Boot 默認自動配置的基礎上,我們可以通過什么方式以及如何進行自定義的拓展。本節中提到但未列出實例的內容,大家可以根據已經學習到的思路相應練習。

小結

本文重點針對 Spring Boot 中 Web 應用的自動配置和 Spring MVC 的自動配置展開,并以Spring MVC 中的一些典型配置為例進行了源碼講解。

其 實 圍 繞 Web 應 用 還 有 一 系 列 的 自 動 配 置 比 如HttpEncodingAutoConfigurationMultipartAutoConfiguration和HttpMessageConvertersAutoConfiguration 等。我們只需領悟自動配置的精髓:這些相關配置只不過是將之前通過 xml 來配置 Bean,轉換成了基于類的形式來配置而已。讀者可按照以上方法對其他 Web 相關的配置項進行相應的閱讀和分析。

SpringBoot Web 應用源碼解析:綜合實戰和整體總結

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99热在线观看免费 | 日韩视频一| zol中关村在线官网 yy6080欧美三级理论 | 双性np玩烂了np欲之国的太子 | 久久99re2热在线播放7 | 亚洲国产精品二区久久 | 亚洲国产99在线精品一区二区 | 黄篇网站在线观看 | 日韩成人在线免费视频 | 久久精品手机观看 | 午夜一级影院 | 国产成人精品视频一区二区不卡 | 国产在线观看精品香蕉v区 国产在线观看a | 俺去啦最新地址 | 日日爱669| 欧美一区二区三区精品国产 | 午夜神器18以下不能进免费 | 天堂精品高清1区2区3区 | 亚洲老头老太hd | 日日操日日舔 | 免费成年网站 | 99re热| 国产精品久久久久久久久 | 亚洲经典激情春色另类 | 波多野结衣之双方调教在线观看 | 精品国产剧情在线观看 | 好男人免费高清在线观看2019 | 色天使亚洲综合在线观看 | 国产成人精品曰本亚洲77美色 | 四虎永久免费地址ww417 | 亚洲精品电影天堂网 | 久久er国产精品免费观看2 | 好硬好大好浪夹得好紧h | 小货SAO边洗澡边CAO你动漫 | 精品国产福利在线观看一区 | 午夜第九达达兔鲁鲁 | 极品丝袜小说全集 | 国产成人刺激视频在线观看 | 久久日韩精品无码一区 | 国产三级精品久久三级国专区 | 欧美亚洲国产精品久久第一页 |