最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC中的ResourceUrlProviderExposingInterceptor詳解

 更新時間:2023年12月25日 10:12:07   作者:安迪源文  
這篇文章主要介紹了SpringMVC中的ResourceUrlProviderExposingInterceptor詳解,ResourceUrlProviderExposingInterceptor是Spring MVC的一個HandlerInterceptor,用于向請求添加一個屬性,需要的朋友可以參考下

ResourceUrlProviderExposingInterceptor詳解

概述

ResourceUrlProviderExposingInterceptor是Spring MVC的一個HandlerInterceptor,用于向請求添加一個屬性,屬性名稱為ResourceUrlProvider.class.getName(),值是Spring MVC配置定義的一個資源URL提供者對象ResourceUrlProvider。

缺省情況下,Spring MVC配置機制會主動構(gòu)建一個ResourceUrlProviderExposingInterceptor應(yīng)用于所有的請求。

關(guān)于應(yīng)用

引入

缺省被WebMvcConfigurationSupport啟用:

// WebMvcConfigurationSupport 代碼片段
// 
	/**
	 * Provide access to the shared handler interceptors used to configure
	 * {@link HandlerMapping} instances with.
	 * <p>This method cannot be overridden; use {@link #addInterceptors} instead.
	 */
	protected final Object[] getInterceptors() {
		if (this.interceptors == null) {
			InterceptorRegistry registry = new InterceptorRegistry();
			addInterceptors(registry);
			registry.addInterceptor(new ConversionServiceExposingInterceptor(mvcConversionService()));
          // 這里創(chuàng)建  ResourceUrlProviderExposingInterceptor,使用的 ResourceUrlProvider
          // 由另外一個 bean 定義方法 #mvcResourceUrlProvider 提供
			registry.addInterceptor(new ResourceUrlProviderExposingInterceptor(mvcResourceUrlProvider()));
			this.interceptors = registry.getInterceptors();
		}
		return this.interceptors.toArray();
	}
// requestMappingHandlerMapping() bean 定義中使用所有 getInterceptors() 定義的通用攔截器
// 		mapping.setInterceptors(getInterceptors());
// viewControllerHandlerMapping() bean 定義中使用所有 getInterceptors() 定義的通用攔截器
// 		handlerMapping.setInterceptors(getInterceptors());
// beanNameHandlerMapping() bean 定義中使用所有 getInterceptors() 定義的通用攔截器
// 		mapping.setInterceptors(getInterceptors());
// resourceHandlerMapping() bean 定義中使用所有 getInterceptors() 定義的通用攔截器
// 		handlerMapping.setInterceptors(getInterceptors());

使用

DispatcherServlet#doDispatch請求處理主流程會先找到能處理該請求的Handler,以HandlerExecutionChain形式包裝存在。

這些HandlerExecutionChain來自某個HandlerMapping,而這些HandlerMapping就是Spring MVC配置中定義的那些HandlerMapping,它們在DispatcherServlet初始化階段#initHandlerMappings執(zhí)行時被從容器中獲取。

DispatcherServlet#doDispatch得到HandlerExecutionChain之后,會調(diào)用其方法applyPreHandle以應(yīng)用各個HandlerInterceptor對請求的前置處理邏輯。

這其中就有ConversionServiceExposingInterceptor。

// HandlerExecutionChain 代碼片段
    /**
	 * Apply preHandle methods of registered interceptors.
	 * @return {@code true} if the execution chain should proceed with the
	 * next interceptor or the handler itself. Else, DispatcherServlet assumes
	 * that this interceptor has already dealt with the response itself.
	 */
	boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {
		HandlerInterceptor[] interceptors = getInterceptors();
		if (!ObjectUtils.isEmpty(interceptors)) {
			for (int i = 0; i < interceptors.length; i++) {
				HandlerInterceptor interceptor = interceptors[i];
				if (!interceptor.preHandle(request, response, this.handler)) {
					triggerAfterCompletion(request, response, null);
					return false;
				}
				this.interceptorIndex = i;
			}
		}
		return true;
	}

源代碼解析

源代碼版本 : spring-webmvc-5.1.5.RELEASE

package org.springframework.web.servlet.resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.Assert;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
/**
 * An interceptor that exposes the {@link ResourceUrlProvider} instance it
 * is configured with as a request attribute.
 *
 * @author Rossen Stoyanchev
 * @since 4.1
 */
public class ResourceUrlProviderExposingInterceptor extends HandlerInterceptorAdapter {
	/**
	 * Name of the request attribute that holds the {@link ResourceUrlProvider}.
	 */
	public static final String RESOURCE_URL_PROVIDER_ATTR = ResourceUrlProvider.class.getName();
	private final ResourceUrlProvider resourceUrlProvider;
	public ResourceUrlProviderExposingInterceptor(ResourceUrlProvider resourceUrlProvider) {
		Assert.notNull(resourceUrlProvider, "ResourceUrlProvider is required");
		this.resourceUrlProvider = resourceUrlProvider;
	}
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		request.setAttribute(RESOURCE_URL_PROVIDER_ATTR, this.resourceUrlProvider);
		return true;
	}
}

到此這篇關(guān)于SpringMVC中的ResourceUrlProviderExposingInterceptor詳解的文章就介紹到這了,更多相關(guān)ResourceUrlProviderExposingInterceptor詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-plus3.4.3下使用lambdaQuery報錯解決

    Mybatis-plus3.4.3下使用lambdaQuery報錯解決

    最近在使用lambdaQuery().eq(CommonUser::getOpenId, openId).one()進(jìn)行查詢報錯,本文主要介紹了Mybatis-plus3.4.3下使用lambdaQuery報錯解決,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • 詳解設(shè)計模式中的proxy代理模式及在Java程序中的實現(xiàn)

    詳解設(shè)計模式中的proxy代理模式及在Java程序中的實現(xiàn)

    代理模式主要分為靜態(tài)代理和動態(tài)代理,使客戶端方面的使用者通過設(shè)置的代理來操作對象,下面來詳解設(shè)計模式中的proxy代理模式及在Java程序中的實現(xiàn)
    2016-05-05
  • 淺談Java中Spring Boot的優(yōu)勢

    淺談Java中Spring Boot的優(yōu)勢

    在本篇文章中小編給大家分析了Java中Spring Boot的優(yōu)勢以及相關(guān)知識點內(nèi)容,興趣的朋友們可以學(xué)習(xí)參考下。
    2018-09-09
  • idea創(chuàng)建Spring項目的方法步驟(圖文)

    idea創(chuàng)建Spring項目的方法步驟(圖文)

    這篇文章主要介紹了idea創(chuàng)建Spring項目的方法步驟(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 關(guān)于feign對x-www-form-urlencode類型的encode和decode問題

    關(guān)于feign對x-www-form-urlencode類型的encode和decode問題

    這篇文章主要介紹了關(guān)于feign對x-www-form-urlencode類型的encode和decode問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java字符串的截取方法substring()代碼解析

    java字符串的截取方法substring()代碼解析

    這篇文章主要介紹了java字符串的截取方法substring()代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • JDBC利用C3P0數(shù)據(jù)庫連接池連接數(shù)據(jù)庫

    JDBC利用C3P0數(shù)據(jù)庫連接池連接數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了JDBC利用C3P0數(shù)據(jù)庫連接池連接數(shù)據(jù)庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • @MapperScan注解與@Mapper注解的使用

    @MapperScan注解與@Mapper注解的使用

    這篇文章主要介紹了@MapperScan注解與@Mapper注解的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中定義Logger的三種常用方式介紹

    Java中定義Logger的三種常用方式介紹

    在 Java 開發(fā)中,日志記錄是不可或缺的一部分,它幫助我們跟蹤程序的運行狀態(tài)、調(diào)試問題以及記錄重要信息本文將詳細(xì)介紹 Java 中定義 Logger 的三種方式,大家可以根據(jù)需求進(jìn)行選擇
    2025-03-03
  • Java實戰(zhàn)之火車票預(yù)訂系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)之火車票預(yù)訂系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了利用Java實現(xiàn)的火車票預(yù)訂系統(tǒng),文中用到了JSP?、Servlert、JQuery、Ajax?等技術(shù),文中示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02

最新評論

镇康县| 黎川县| 富顺县| 酉阳| 无棣县| 巧家县| 大连市| 徐水县| 丰宁| 墨玉县| 闸北区| 淮南市| 乌兰浩特市| 江口县| 桃江县| 安顺市| 济宁市| 汉沽区| 青川县| 阿城市| 定日县| 青州市| 平乡县| 元阳县| 屏山县| 汤原县| 灵武市| 渝北区| 兰考县| 凤山市| 枣庄市| 腾冲县| 扎囊县| 阿拉善左旗| 庄河市| 浠水县| 鹤岗市| 罗山县| 方正县| 利川市| 呼图壁县|