偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SpringBoot Web 應(yīng)用源碼解析:綜合實(shí)戰(zhàn)和整體總結(jié)

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

綜合實(shí)戰(zhàn)

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

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

SpringBootWeb應(yīng)用源碼解析:綜合實(shí)戰(zhàn)和整體總結(jié)

Thymeleaf 是一個(gè) Java 類庫(kù),能夠處理 HTML/HTML5、XML、JavaScript、CSS, 甚至純文本類型的文件。通??梢杂米鱉VC中的View層,它可以完全替代 JSP。該框架是SpringBoot 首推的前端展示框架。

首先我們創(chuàng)建一個(gè)集成 Thymeleaf 的 SpringBootWeb 項(xiàng)目。集成 Thymeleaf 的核心操作就是引入對(duì)應(yīng)的 starter,對(duì)應(yīng)項(xiàng)目中 pom.xml 的依賴如下。

  1. <dependency> 
  2. <groupId>org. springframework. boot</groupId> 
  3. <artifactId>spring- boot- starter-thymeleaf</ artifactId> 
  4. < /dependency> 
  5. <groupId>org. springframework . boot</groupId> 
  6. <artifactId>spring- boot - starter - web</artifactId> 
  7. </ dependency> 

通過(guò)前面的學(xué)習(xí)我們已經(jīng)得知引入該 starter 之后,Spring Boot 便會(huì)進(jìn)行一個(gè)初始化的基本配置,因此針對(duì) Thymeleaf 的最簡(jiǎn)單集成便完成了,關(guān)于頁(yè)面展示和基礎(chǔ)配置我們暫時(shí)先不考慮。當(dāng)集成 Thymeleaf 之后,Thymeleaf 對(duì)應(yīng)的自動(dòng)配置類 ThymeleafAutoConfiguration 中會(huì)初始化一個(gè) ThymeleafViewResolver, 用來(lái)對(duì) Thymeleaf 的頁(yè)面進(jìn)行解析和渲染。這一操作本質(zhì)上同默認(rèn)的 BeanNameViewResolver 作用-樣,都實(shí)現(xiàn)了 ViewResolver 接口。

此時(shí),如果官方提供的 ThymeleafViewResolver 的默認(rèn)設(shè) 置無(wú)法滿足我們的需求,可以通過(guò) 兩 種 途 徑 進(jìn) 行 自 定 義 設(shè) 置 : 通 過(guò) application 配 置 文 件 配 置 和 自 行 創(chuàng) 建ThymeleafViewResolver 對(duì)象。

通過(guò) application 配置對(duì)應(yīng)的屬性定義位于 ThymeleafProperties 類中,我們已經(jīng)做過(guò)多次類似的配置,不再贅述。

我們可以通過(guò)以下方式自行創(chuàng)建 ThymeleafViewResolver 對(duì)象。先定義一個(gè)配置類ViewResolverConfig,并在類內(nèi)部通過(guò)@Bean 注解對(duì)實(shí)例化的 ThymeleafViewResolver對(duì)象進(jìn)行注入容器的操作。

  1. @Configuration 
  2. public class ViewResolverConfig { 
  3. @Bean 
  4. public ThymeleafViewResolver thymeleafViewResolver() { 
  5. Thyme leafViewResolver resolver = new ThymeleafViewResolver(); 
  6. //設(shè)置 ViewResolver 對(duì)應(yīng)的屬性 值 
  7. resolver. setCharacterEncoding("UTF-8"); 
  8. resolver. setCache(false); 
  9. return resolver; 

@Bean 默 認(rèn) 會(huì) 將 方 法 thymeleafViewResolver 作 為 Bean 的 key, 將 返 回 的Thymeleaf-ViewResolver 對(duì) 象 作 為 Value 存 入 容 器 當(dāng) 中 。 在 方 法 內(nèi) 部 , 可 通 過(guò)ThymeleafViewResolver 對(duì)應(yīng)的方法進(jìn)行屬性的初始化設(shè)置。通過(guò)以上代碼我們便完成了自定義 Thymeleaf-ViewResolver 的注入。

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

上面針對(duì) SpringMVC 中 Thymeleaf 的 ViewResolver 的自定義進(jìn)行了講解。

其實(shí)在 Spring Boot 中,大多數(shù)組件都可以采用同樣的方式對(duì)默認(rèn)配置進(jìn)行覆蓋。除了上述方法,在 Spring Boot 項(xiàng)目中還可以通過(guò)實(shí)現(xiàn) WebMvcConfigurer 接口來(lái)進(jìn)行更靈活地自定義配置。

通過(guò) WebMvcConfigurer 接口實(shí)現(xiàn)自定義配置是 Spring 內(nèi)部的一-種配置方式,它替代了傳統(tǒng)的 XML 形式的配置。通過(guò)對(duì)該接口具體方法的實(shí)現(xiàn),可以自定義一些 Handler、Interceptor 、ViewResolver 、MessageConverter 等參 數(shù) 。 以 上 面 配 置ThymeleafViewResolver 為例,我們也可以通過(guò)實(shí)現(xiàn)該接口的 configureViewResolvers 方法來(lái)進(jìn)行配置,達(dá)到同樣的效果,具體示例代碼如下:

  1. @Configuration 
  2. public class MyMvcConfig implements WebMvcConfigurer { 
  3. @Override 
  4. public void configureViewResolvers (ViewResolverRegistry registry) { 
  5. Thyme leafViewResolver resolver = new ThymeleafViewResolver(); 
  6. //設(shè)置 ViewResolver 對(duì)應(yīng)的屬 性值 
  7. resolver. setCharacterEncoding("UTF-8"); 
  8. resolver . setCache(false); 
  9. registry . viewResolver(resolver); 

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

SpringBootWeb應(yīng)用源碼解析:綜合實(shí)戰(zhàn)和整體總結(jié)

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

@EnableWebMvc

@Configuration

public class MyMvcConfig implements WebMvcConfigurer {

使用該注解等于擴(kuò)展了 WebMvcConfigurationSupport,但是沒(méi)有重寫(xiě)任何方法,因此所需的功能都需要開(kāi)發(fā)人員自行實(shí)現(xiàn)。-般情況下不推薦使用這種方式,該方式更適合基于 SpringBoot 提供的默認(rèn)配置,針對(duì)特別需求進(jìn)行有針對(duì)性拓展的場(chǎng)景。

其實(shí),本節(jié)內(nèi)容的重點(diǎn)并不只是讓大家學(xué)會(huì)簡(jiǎn)單的 Web 自定義配置,更深的用意是希望大家了解在 Spring Boot 默認(rèn)自動(dòng)配置的基礎(chǔ)上,我們可以通過(guò)什么方式以及如何進(jìn)行自定義的拓展。本節(jié)中提到但未列出實(shí)例的內(nèi)容,大家可以根據(jù)已經(jīng)學(xué)習(xí)到的思路相應(yīng)練習(xí)。

小結(jié)

本文重點(diǎn)針對(duì) Spring Boot 中 Web 應(yīng)用的自動(dòng)配置和 Spring MVC 的自動(dòng)配置展開(kāi),并以Spring MVC 中的一些典型配置為例進(jìn)行了源碼講解。

其 實(shí) 圍 繞 Web 應(yīng) 用 還 有 一 系 列 的 自 動(dòng) 配 置 比 如HttpEncodingAutoConfigurationMultipartAutoConfiguration和HttpMessageConvertersAutoConfiguration 等。我們只需領(lǐng)悟自動(dòng)配置的精髓:這些相關(guān)配置只不過(guò)是將之前通過(guò) xml 來(lái)配置 Bean,轉(zhuǎn)換成了基于類的形式來(lái)配置而已。讀者可按照以上方法對(duì)其他 Web 相關(guān)的配置項(xiàng)進(jìn)行相應(yīng)的閱讀和分析。

SpringBootWeb應(yīng)用源碼解析:綜合實(shí)戰(zhàn)和整體總結(jié)

 

 

責(zé)任編輯:張燕妮 來(lái)源: 今日頭條
相關(guān)推薦

2020-10-26 15:01:02

Spring Boot源碼參數(shù)

2009-06-01 11:09:16

OSGI實(shí)戰(zhàn)進(jìn)階

2024-08-26 10:31:23

2020-11-20 07:51:02

JavaSPI機(jī)制

2011-02-15 11:46:41

2010-05-20 09:48:36

2025-05-12 04:01:00

2011-05-16 13:07:30

2010-09-16 15:42:56

2013-05-27 14:03:10

綜合布線布線經(jīng)驗(yàn)

2010-07-07 20:06:53

2010-06-13 13:13:12

UML建模

2010-09-17 09:13:10

2024-04-12 12:22:39

前端開(kāi)發(fā)網(wǎng)絡(luò)請(qǐng)求

2015-03-30 17:04:54

智慧商業(yè)綜合體整體方案華為

2021-09-27 08:56:44

NettyChannelHand架構(gòu)

2025-06-26 02:11:00

2010-06-17 16:14:33

UML總結(jié)

2011-08-02 15:19:28

2009-12-31 09:47:07

WEB開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)