日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > springMVC源碼解析--HandlerMethodArgumentResolverComposite參數解析器集合(二)

springMVC源碼解析--HandlerMethodArgumentResolverComposite參數解析器集合(二)

來源:程序員人生   發布時間:2017-03-11 09:56:58 閱讀次數:4527次

上1篇博客springMVC源碼分析--HandlerMethodArgumentResolver參數解析器(1)中我們已介紹了參數解析相干的東西,并且也提到了HandlerMethodArgumentResolverComposite,其簡單來講就是所有的參數解析器的鏈表,保存了springMVC提供的所有的參數解析器,采取職責鏈的模式來完成參數解析器的查找,并完成參數解析生成目標對象。

完全源碼及說明以下:

public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgumentResolver {

	protected final Log logger = LogFactory.getLog(getClass());

	//保存springMVC提供的所有的參數解析器
	private final List<HandlerMethodArgumentResolver> argumentResolvers =
			new LinkedList<HandlerMethodArgumentResolver>();

	//用于緩存已查找過的參數解析器
	private final Map<MethodParameter, HandlerMethodArgumentResolver> argumentResolverCache =
			new ConcurrentHashMap<MethodParameter, HandlerMethodArgumentResolver>(256);
	//獲得所有的參數解析器
	public List<HandlerMethodArgumentResolver> getResolvers() {
		return Collections.unmodifiableList(this.argumentResolvers);
	}

	//判斷參數解析器是不是支持參數解析
	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		return (getArgumentResolver(parameter) != null);
	}

	//返回參數解析器解析后的數據
	@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

		HandlerMethodArgumentResolver resolver = getArgumentResolver(parameter);
		if (resolver == null) {
			throw new IllegalArgumentException("Unknown parameter type [" + parameter.getParameterType().getName() + "]");
		}
		return resolver.resolveArgument(parameter, mavContainer, webRequest, binderFactory);
	}

	//獲得支持某個參數解析的參數解析器
	private HandlerMethodArgumentResolver getArgumentResolver(MethodParameter parameter) {
		HandlerMethodArgumentResolver result = this.argumentResolverCache.get(parameter);
		if (result == null) {
			for (HandlerMethodArgumentResolver methodArgumentResolver : this.argumentResolvers) {
				if (logger.isTraceEnabled()) {
					logger.trace("Testing if argument resolver [" + methodArgumentResolver + "] supports [" +
							parameter.getGenericParameterType() + "]");
				}
				if (methodArgumentResolver.supportsParameter(parameter)) {
					result = methodArgumentResolver;
					this.argumentResolverCache.put(parameter, result);
					break;
				}
			}
		}
		return result;
	}

	//添加參數解析器
	public HandlerMethodArgumentResolverComposite addResolver(HandlerMethodArgumentResolver resolver) {
		this.argumentResolvers.add(resolver);
		return this;
	}
	//獲得參數解析器集合
	public HandlerMethodArgumentResolverComposite addResolvers(List<? extends HandlerMethodArgumentResolver> resolvers) {
		if (resolvers != null) {
			for (HandlerMethodArgumentResolver resolver : resolvers) {
				this.argumentResolvers.add(resolver);
			}
		}
		return this;
	}

}


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品欧美一区二区在线观看 | 国产视频色 | 日韩精品国产精品 | 国产日韩视频 | 中文字幕不卡在线 | 中文字幕欧美激情 | 国产成人精品一区二区三区视频 | 黄色一级片在线 | 欧美精品在线免费观看 | 国内精品国产成人国产三级粉色 | 国产精品国产三级国产普通话三级 | 91超碰在 | 国产精品久久久久久久久久免费 | 日韩精品免费一区二区三区 | 污视频免费在线观看 | 一区欧美| 小草av | 91大神精品视频在线观看 | 久久久亚洲一区 | 91亚洲精品一区二区 | 亚洲2020天天堂在线观看 | 成人免费淫片aa视频免费 | 一区二区a视频 | 羞羞的视频网站 | 在线第一页 | 成人日韩 | 国产精品麻豆 | 超碰999| 日韩免费在线视频 | 久久久久久综合 | 草久久 | 91射区| 久久精品国产欧美亚洲人人爽 | av免费网站在线观看 | 日韩在线精品 | 懂色av一区二区三区免费 | 天堂中文аⅴ在线 | 成人午夜网址 | 美女一区 | 一级性a | 狠久久|