多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

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

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

上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;
	}

}


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕第10页 | 欧美最猛黑人xxxx黑人猛交3p | 午夜视频h | 九色精品在线 | 亚洲成a人片在线播放观看国产 | 国产精品久久久久影院免费 | 91精品久久一区二区三区 | 久爱免费观看在线网站 | 福利视频一区二区三区 | 99国产国人青青视频在线观看 | japanesehd国产在线无毒不卡 | 久久精品国产线看观看亚洲 | 欧美3d怪物交 | 午夜福免费福利在线观看 | 欧美高清另类video | 欧美亚洲国产片在线观看 | 色阁阁日韩欧美在线 | 在线亚洲观看 | 国产成人精品第一区二区 | www大片| 伊人网五月天 | 一区二区三区精品 | 欧美福利网站 | 天天综合在线观看 | 欧美一二三区视频 | 欧美久久久久久久一区二区三区 | 久久久久久一级毛片免费无遮挡 | 亚洲免费成人网 | 亚洲国产精品综合久久一线 | 日本一区二区免费看 | 国产国产人在线成免费视频69 | 久爱免费观看在线精品 | 伊人福利在线 | 亚洲成aⅴ人片在线影院八 亚洲成aⅴ人在线观看 | 亚洲一区二区影院 | 最近中文字幕1视频 | 精品h视频 | 中日韩欧美中文字幕毛片 | 精品久久久久久久一区二区伦理 | 自拍偷拍图 | 日韩精品福利在线 |