成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SpringMVC之源碼分析--ViewResolver(三)

fox_soyoung / 1790人閱讀

摘要:概述本節(jié)學(xué)習(xí)下的功能,簡單來說,該類的作用就是把多個視圖解析器進(jìn)行組裝,內(nèi)部使用存儲配置使用的視圖解析器。總結(jié)本章介紹了類,根據(jù)測試,了解到屬性不影響中配置使用的視圖解析器順序。

概述

本節(jié)學(xué)習(xí)下ViewResolverComposite的功能,簡單來說,該類的作用就是把多個ViewResolver視圖解析器進(jìn)行組裝,內(nèi)部使用list存儲配置使用的視圖解析器。

本系列文章是基于Spring5.0.5RELEASE。

源碼

ViewResolverComposite實(shí)現(xiàn)ViewResolver接口,源碼如下;

public class ViewResolverComposite implements ViewResolver, Ordered, InitializingBean,
    ApplicationContextAware, ServletContextAware {
    // 用于存儲使用的ViewResolver容器
    private final List viewResolvers = new ArrayList<>();
    // 支持排序
    // 此排序并不影響上面list中的順序
    private int order = Ordered.LOWEST_PRECEDENCE;

    ... ...

    /**
     *根據(jù)邏輯視圖名稱進(jìn)行解析
     */
    @Override
    @Nullable
    public View resolveViewName(String viewName, Locale locale) throws Exception {
        // 迭代配置使用的ViewResolver集合
        for (ViewResolver viewResolver : this.viewResolvers) {
            // 逐一調(diào)用不同的解析器進(jìn)行解析
            View view = viewResolver.resolveViewName(viewName, locale);
            // 找到View即返回
            if (view != null) {
                return view;
            }
        }
        // 未找到返回null
        return null;
    }

    ... ...
}

以上是ViewResolverComposite核心代碼。

實(shí)戰(zhàn)

練習(xí)ViewResolverComposite的使用。

項(xiàng)目結(jié)構(gòu)

pom文件

通過maven構(gòu)建,引入依賴的jar坐標(biāo),代碼如下:



    org.springframework
    spring-webmvc
    5.0.5.RELEASE



    javax.servlet
    javax.servlet-api
    3.1.0
    provided



    javax.servlet
    jstl
    1.2

Spring配置文件

通過此文件配置Spring MVC的組件,代碼如下:






    
        
            
            
        
    
    




    
    
    
    




    



    

部署描述文件

配置Spring MVC核心控制器DispatcherSerlvet,代碼如下:


    
    dispatcher
    
    org.springframework.web.servlet.DispatcherServlet
    
    
        contextConfigLocation
        classpath:spring-servlet.xml
    
    
    1
    true



    
    dispatcher
    
    /

處理器

編寫處理器,本例使用注解,代碼如下:

@Controller
public class DemoController {
    @GetMapping("/viewResolverComposite")
    public String viewResolverComposite(){
        return "test";
    }
}

測試

測試一:視圖解析器屬性order并不影響ViewResolverComposite組裝使用的視圖解析器順序

根據(jù)以上配置,如果order影響的話,視圖解析應(yīng)有BeanNameViewResolver進(jìn)行解析,但通過測試結(jié)果并不是由其進(jìn)行的處理,故order不影響內(nèi)部組裝順序,如下圖:

測試二:ViewResolverComposite組裝的視圖解析器順序由其存入順序影響,即如上配置屬性viewResolvers的list從上往下一次處理。

把viewResolvers的list數(shù)據(jù)順序調(diào)整一下,調(diào)整后如下:


    
        
        
    

重啟再次斷點(diǎn)查看,如下圖:

此時處理視圖解析的變更為BeanNameViewResolver。

測試三:測試order功能

我們設(shè)置Spring中的ViewResolver的order屬性,如下:



    
        
            
            

        
    
    



    
    
    
    



    

驗(yàn)證Spring加載的視圖解析器是否與我們的順序一致,啟動時如果如下圖:

用戶請求時,結(jié)果如下圖:

由結(jié)果可知,Spring是按我們配置的order屬性進(jìn)行排序的。

總結(jié)

本章介紹了ViewResolverComposite類,根據(jù)測試,了解到order屬性不影響ViewResolverComposite中配置使用的視圖解析器順序。order控制Spring加載使用視圖解析器的順序。

最后創(chuàng)建了qq群方便大家交流,可掃描加入,同時也可加我qq:276420284,共同學(xué)習(xí)、共同進(jìn)步,謝謝!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69652.html

相關(guān)文章

  • SpringMVC源碼分析--ViewResolver(六)

    摘要:與一樣,該類繼承抽象類,并且通過外部的屬性文件定義邏輯視圖名稱與真正的視圖對象的關(guān)系,屬性文件默認(rèn)是下的,可以通過或?qū)傩詠碇付?,該屬性指的是文件的基名稱,也就是說以屬性值開頭的屬性文件。 概述 本章再學(xué)習(xí)另外兩個ViewResolver,分別是XmlViewResolver和ResourceBundleViewResolver,從功能上說,這兩個視圖解析器都是從外部資源文件中查找視圖V...

    alighters 評論0 收藏0
  • SpringMVC源碼分析--ViewResolver(二)

    摘要:概述上篇學(xué)習(xí)了視圖解析器作用及處理流程,為我們提供了豐富的視圖解析器見下圖本系列文章是基于。該視圖解析器是根據(jù)處理器返回的邏輯視圖名稱,在應(yīng)用上下文中查找該名稱的視圖對象視圖對象就是的對象。 概述 上篇學(xué)習(xí)了Spring MVC ViewResolver視圖解析器作用及處理流程,Spring為我們提供了豐富的視圖解析器(見下圖):showImg(https://segmentfault...

    jas0n 評論0 收藏0
  • SpringMVC源碼分析--ViewResolver(一)

    摘要:概述本章開始進(jìn)入另一重要的組件,即視圖組件,處理視圖組件使用兩個主要的接口是和。接口的作用是用于處理視圖進(jìn)行渲染。延用之前的介紹流程,本章分兩部分進(jìn)行闡述啟動初始化和請求處理。 概述 本章開始進(jìn)入另一重要的組件,即視圖組件,Spring MVC處理視圖組件使用兩個主要的接口是ViewResolver和View。根據(jù)名稱可知,ViewResolver即視圖解析器,其作用是把邏輯視圖名稱解...

    pf_miles 評論0 收藏0
  • SpringMVC源碼分析--ViewResolver(四)

    摘要:概述本章繼續(xù)學(xué)習(xí)另一個實(shí)現(xiàn)類解析器,該類的主要作用是根據(jù)同一請求的某些策略,選擇對應(yīng)的進(jìn)行渲染??梢园牙斫鉃檫m配器,對不同類型進(jìn)行適配。值得注意的是處理的為同一個。本系列文章是基于。實(shí)戰(zhàn)需求目標(biāo)實(shí)現(xiàn)后綴名或參數(shù)控制,顯示不同的視圖。 概述 本章繼續(xù)學(xué)習(xí)ViewResolver另一個實(shí)現(xiàn)類ContentNegotiatingViewResolver解析器,該類的主要作用是根據(jù)同一請求的某...

    jcc 評論0 收藏0
  • SpringMVC源碼分析--ViewResolver(五)

    摘要:此解析器與差不多,更改下配置文件中的類全路徑即可??偨Y(jié)本章介紹了以及三個視圖解析器。這部分內(nèi)容有點(diǎn)兒多,我會盡快結(jié)束。 概述 通過上幾篇的學(xué)習(xí),我們分析了并試驗(yàn)了ViewResolverComposite、BeanNameViewResolver和ContentNegotiatingViewResolver,這三個類都直接實(shí)現(xiàn)ViewResolver接口。Spring MVC提供了很多...

    klinson 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<