国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

jas0n / 1839人閱讀

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

概述

上篇學(xué)習(xí)了Spring MVC ViewResolver視圖解析器作用及處理流程,Spring為我們提供了豐富的視圖解析器(見下圖):

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

BeanNameViewResolver

該視圖解析器是根據(jù)處理器(handler)返回的邏輯視圖名稱,在應(yīng)用上下文中查找該名稱的視圖bean對(duì)象(視圖bean對(duì)象就是View的bean對(duì)象)。具有如下特點(diǎn):

視圖bean對(duì)象需注冊(cè)在Spring應(yīng)用上下中,即由托管給Spring進(jìn)行管理;

處理器返回的邏輯視圖名稱為視圖bean對(duì)象名稱(或id);

源碼

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

public class BeanNameViewResolver extends WebApplicationObjectSupport implements ViewResolver, Ordered {
    // 實(shí)現(xiàn)Ordered接口,支持對(duì)個(gè)ViewResolver排序,值越小優(yōu)先級(jí)越高
    private int order = Ordered.LOWEST_PRECEDENCE; 

    public void setOrder(int order) {
        this.order = order;
    }

    @Override
    public int getOrder() {
        return this.order;
    }

    /**
     *實(shí)現(xiàn)ViewResolver接口方法
     *參數(shù)viewName就是處理器返回的邏輯視圖名稱
     */
    @Override
    @Nullable
    public View resolveViewName(String viewName, Locale locale) throws BeansException {
        // 獲取上下文
        ApplicationContext context = obtainApplicationContext();
        // 查找上下文中是否有“viewName”的bean定義
        if (!context.containsBean(viewName)) {
            if (logger.isDebugEnabled()) {
                logger.debug("No matching bean found for view name "" + viewName + """);
            }
            // Allow for ViewResolver chaining...
            return null;
        }
        // 判斷“viewName”的bean對(duì)象是否是View類型
        if (!context.isTypeMatch(viewName, View.class)) {
            if (logger.isDebugEnabled()) {
                logger.debug("Found matching bean for view name "" + viewName +
                        "" - to be ignored since it does not implement View");
            }
            // Since we"re looking into the general ApplicationContext here,
            // let"s accept this as a non-match and allow for chaining as well...
            return null;
        }
        // 返回上下文中指定名稱(或id)的View類型的bean
        return context.getBean(viewName, View.class);
    }

}
實(shí)戰(zhàn)

練習(xí)BeanNameViewResolver的使用。

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

pom文件

通過(guò)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配置文件

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






    
    




    

部署描述文件

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


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



    
    dispatcher
    
    /

處理器

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

@Controller
public class Demo1Controller {
    @RequestMapping(value = "/beanNameViewResolver")
    public String beanNameViewResolver(){
        return "test";
    }
}

以上例子,在Spring MVC容器中定義了BeanNameViewResolver視圖解析器和id為test的InternalResourceView視圖bean(可以替換),以上配置后,在handler處理器返回的邏輯視圖名稱為test的時(shí)候,就會(huì)使用id為test的視圖bean對(duì)象(InternalResourceView)進(jìn)行視圖渲染。

總結(jié)

本章介紹了BeanNameViewResolver的源碼及測(cè)試小例子,希望對(duì)大家有幫助。

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/69653.html

相關(guān)文章

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

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

    fox_soyoung 評(píng)論0 收藏0
  • SpringMVC源碼分析--ViewResolver(一)

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

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

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

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

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

    klinson 評(píng)論0 收藏0
  • SpringMVC源碼分析--ViewResolver(六)

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

    alighters 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<