• 當前位置:聯(lián)升科技 > 技術(shù)資訊 > 開(kāi)發(fā)技術(shù) >

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

    2020-10-31    作者:程序員高級碼農    來(lái)源:今日頭條    閱讀: 次
    綜合實(shí)戰
    關(guān)于 Web 方面的配置比較多,值得慶幸的是,Spring Boot 已經(jīng)幫我們預置初始化了很多基礎組件。但在實(shí)踐的過(guò)程中,某些基礎的組件并不能滿(mǎn)足我們的實(shí)際需求,這時(shí)就需要我們重新初始化相應組件,甚至在某些極端的情況下需要完全接管 Spring Boot 的默認配置。
    本文將基于對前端模板框架 Thymeleaf 的集成,逐步向大家演示如何自定義 ViewResolver以及如何進(jìn)一步 擴展 Spring MVC 配置。本實(shí)例涉及集成 Thymeleaf、自定義初始化ThymeleafViewResolver 以及擴展 Spring MVC。
    Thymeleaf 是一個(gè) Java 類(lèi)庫,能夠處理 HTML/HTML5、XML、JavaScript、CSS, 甚至純文本類(lèi)型的文件。通??梢杂米鱉VC中的View層,它可以完全替代 JSP。該框架是SpringBoot 首推的前端展示框架。
    首先我們創(chuàng )建一個(gè)集成 Thymeleaf 的 SpringBootWeb 項目。集成 Thymeleaf 的核心操作就是引入對應的 starter,對應項目中 pom.xml 的依賴(lài)如下。
    <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> 
    通過(guò)前面的學(xué)習我們已經(jīng)得知引入該 starter 之后,Spring Boot 便會(huì )進(jìn)行一個(gè)初始化的基本配置,因此針對 Thymeleaf 的最簡(jiǎn)單集成便完成了,關(guān)于頁(yè)面展示和基礎配置我們暫時(shí)先不考慮。當集成 Thymeleaf 之后,Thymeleaf 對應的自動(dòng)配置類(lèi) ThymeleafAutoConfiguration 中會(huì )初始化一個(gè) ThymeleafViewResolver, 用來(lái)對 Thymeleaf 的頁(yè)面進(jìn)行解析和渲染。這一操作本質(zhì)上同默認的 BeanNameViewResolver 作用-樣,都實(shí)現了 ViewResolver 接口。
    此時(shí),如果官方提供的 ThymeleafViewResolver 的默認設 置無(wú)法滿(mǎn)足我們的需求,可以通過(guò) 兩 種 途 徑 進(jìn) 行 自 定 義 設 置 : 通 過(guò) application 配 置 文 件 配 置 和 自 行 創(chuàng ) 建ThymeleafViewResolver 對象。
    通過(guò) application 配置對應的屬性定義位于 ThymeleafProperties 類(lèi)中,我們已經(jīng)做過(guò)多次類(lèi)似的配置,不再贅述。
    我們可以通過(guò)以下方式自行創(chuàng )建 ThymeleafViewResolver 對象。先定義一個(gè)配置類(lèi)ViewResolverConfig,并在類(lèi)內部通過(guò)@Bean 注解對實(shí)例化的 ThymeleafViewResolver對象進(jìn)行注入容器的操作。
    @Configuration 
    public class ViewResolverConfig { 
    @Bean 
    public ThymeleafViewResolver thymeleafViewResolver() { 
    Thyme leafViewResolver resolver = new ThymeleafViewResolver(); 
    //設置 ViewResolver 對應的屬性 值 
    resolver. setCharacterEncoding("UTF-8"); 
    resolver. setCache(false); 
    return resolver; 
    @Bean 默 認 會(huì ) 將 方 法 thymeleafViewResolver 作 為 Bean 的 key, 將 返 回 的Thymeleaf-ViewResolver 對 象 作 為 Value 存 入 容 器 當 中 。 在 方 法 內 部 , 可 通 過(guò)ThymeleafViewResolver 對應的方法進(jìn)行屬性的初始化設置。通過(guò)以上代碼我們便完成了自定義 Thymeleaf-ViewResolver 的注入。
    那么,原來(lái)默認的 ThymeleafViewResolver 會(huì )怎么處理呢? 我們知道幾乎所有的自動(dòng)配置類(lèi)都是通過(guò)注解設置初始化條件的,比如 ThymeleafViewResolver 默認實(shí)例化的條件是當容器中不存在名稱(chēng)為 thymeleafViewResolver 時(shí)才會(huì )使用默認的初始化。當自定義的ThymeleafViewResolver 類(lèi)完成初始化之后,默認配置的初始化條件便不再滿(mǎn)足了。
    上面針對 SpringMVC 中 Thymeleaf 的 ViewResolver 的自定義進(jìn)行了講解。
    其實(shí)在 Spring Boot 中,大多數組件都可以采用同樣的方式對默認配置進(jìn)行覆蓋。除了上述方法,在 Spring Boot 項目中還可以通過(guò)實(shí)現 WebMvcConfigurer 接口來(lái)進(jìn)行更靈活地自定義配置。
    通過(guò) WebMvcConfigurer 接口實(shí)現自定義配置是 Spring 內部的一-種配置方式,它替代了傳統的 XML 形式的配置。通過(guò)對該接口具體方法的實(shí)現,可以自定義一些 Handler、Interceptor 、ViewResolver 、MessageConverter 等參 數 。 以 上 面 配 置ThymeleafViewResolver 為例,我們也可以通過(guò)實(shí)現該接口的 configureViewResolvers 方法來(lái)進(jìn)行配置,達到同樣的效果,具體示例代碼如下:
    @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 接口時(shí)需注意 Spring Boot 版本,以上代碼是基于 Spring Boot 2.0以后的版本。WebMvcConfigurer 接口還提供 了其他關(guān)于擴展 SpringMVC 配置的接口,使用方法與上述示例基本一樣,大家可以查閱對應的代碼進(jìn)一步了解, 這里就不再逐一舉例了。最后,關(guān)于 SpringMVC 自定義配置的最徹底操作就是完全接管 SpringBoot 關(guān)于 SpringMVC的默認配置,具體操作就是在 WebMvcConfigurer 的實(shí)現類(lèi)上使用@EnableWebMvc 注解,示例如下。
    @EnableWebMvc
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    使用該注解等于擴展了 WebMvcConfigurationSupport,但是沒(méi)有重寫(xiě)任何方法,因此所需的功能都需要開(kāi)發(fā)人員自行實(shí)現。-般情況下不推薦使用這種方式,該方式更適合基于 SpringBoot 提供的默認配置,針對特別需求進(jìn)行有針對性拓展的場(chǎng)景。
    其實(shí),本節內容的重點(diǎn)并不只是讓大家學(xué)會(huì )簡(jiǎn)單的 Web 自定義配置,更深的用意是希望大家了解在 Spring Boot 默認自動(dòng)配置的基礎上,我們可以通過(guò)什么方式以及如何進(jìn)行自定義的拓展。本節中提到但未列出實(shí)例的內容,大家可以根據已經(jīng)學(xué)習到的思路相應練習。
    小結
    本文重點(diǎn)針對 Spring Boot 中 Web 應用的自動(dòng)配置和 Spring MVC 的自動(dòng)配置展開(kāi),并以Spring MVC 中的一些典型配置為例進(jìn)行了源碼講解。
    其 實(shí) 圍 繞 Web 應 用 還 有 一 系 列 的 自 動(dòng) 配 置 比 如HttpEncodingAutoConfigurationMultipartAutoConfiguration和HttpMessageConvertersAutoConfiguration 等。我們只需領(lǐng)悟自動(dòng)配置的精髓:這些相關(guān)配置只不過(guò)是將之前通過(guò) xml 來(lái)配置 Bean,轉換成了基于類(lèi)的形式來(lái)配置而已。讀者可按照以上方法對其他 Web 相關(guān)的配置項進(jìn)行相應的閱讀和分析。


    相關(guān)文章

    我們很樂(lè )意傾聽(tīng)您的聲音!
    即刻與我們取得聯(lián)絡(luò )
    成為日后肩并肩合作的伙伴。

    行業(yè)資訊

    聯(lián)系我們

    13387904606

    地址:新余市仙女湖區仙女湖大道萬(wàn)商紅A2棟

    手機:13755589003
    QQ:122322500
    微信號:13755589003

    江西新余網(wǎng)站設計_小程序制作_OA系統開(kāi)發(fā)_企業(yè)ERP管理系統_app開(kāi)發(fā)-新余聯(lián)升網(wǎng)絡(luò )科技有限公司 贛ICP備19013599號-1   贛公網(wǎng)安備 36050202000267號   

    微信二維碼
    色噜噜狠狠一区二区三区果冻|欧美亚洲日本国产一区|国产精品无码在线观看|午夜视频在线观看一区|日韩少妇一区二区无码|伊人亚洲日韩欧美一区二区|国产在线码观看清码视频