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

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

springMVC源碼分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)

來源:程序員人生   發布時間:2017-03-08 08:07:46 閱讀次數:4890次

在上1篇博客 springMVC源碼分析--HandlerMethodReturnValueHandler返回值解析器(1)我們介紹了返回值解析器HandlerMethodReturnValueHandler,接觸到了HandlerMethodReturnValueHandlerComposite,簡單來講HandlerMethodReturnValueHandlerComposite其實就是springMVC提供的所有的HandlerMethodReturnValueHandler集合,它定義了1個鏈表用于存儲所有實現的HandlerMethodReturnValueHandler。

(1)private final List<HandlerMethodReturnValueHandler> returnValueHandlers 用于存儲所有的HandlerMethodReturnValueHandler。

(2)supportsReturnType函數用于判斷HandlerMethodReturnValueHandler是不是支持處理函數返回值。

(3)handleReturnValue用于根據獲得的HandlerMethodReturnValueHandler來處理函數返回值。

(4)HandlerMethodReturnValueHandlerComposite提供了get和setHandlerMethodReturnValueHandler方法

public class HandlerMethodReturnValueHandlerComposite implements AsyncHandlerMethodReturnValueHandler {

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

	//存儲springMVC提供的所有的函數返回值處理器
	private final List<HandlerMethodReturnValueHandler> returnValueHandlers =
		new ArrayList<HandlerMethodReturnValueHandler>();

	public List<HandlerMethodReturnValueHandler> getHandlers() {
		return Collections.unmodifiableList(this.returnValueHandlers);
	}
	//判斷返回值是不是有HandlerMethodReturnValueHandler的實現類去處理
	@Override
	public boolean supportsReturnType(MethodParameter returnType) {
		return getReturnValueHandler(returnType) != null;
	}
	
	//根據返回類型選取返回值處理器
	private HandlerMethodReturnValueHandler getReturnValueHandler(MethodParameter returnType) {
		for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) {
			if (handler.supportsReturnType(returnType)) {
				return handler;
			}
		}
		return null;
	}
	//處理返回值
	@Override
	public void handleReturnValue(Object returnValue, MethodParameter returnType,
			ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {

		HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);
		Assert.notNull(handler, "Unknown return value type [" + returnType.getParameterType().getName() + "]");
		handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
	}
	
	//查找是不是處理返回值的HandlerMethodReturnValue
	private HandlerMethodReturnValueHandler selectHandler(Object value, MethodParameter returnType) {
		boolean isAsyncValue = isAsyncReturnValue(value, returnType);
		for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) {
			if (isAsyncValue && !(handler instanceof AsyncHandlerMethodReturnValueHandler)) {
				continue;
			}
			if (handler.supportsReturnType(returnType)) {
				return handler;
			}
		}
		return null;
	}

	@Override
	public boolean isAsyncReturnValue(Object value, MethodParameter returnType) {
		for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) {
			if (handler instanceof AsyncHandlerMethodReturnValueHandler) {
				if (((AsyncHandlerMethodReturnValueHandler) handler).isAsyncReturnValue(value, returnType)) {
					return true;
				}
			}
		}
		return false;
	}

	//添加返回值處理器
	public HandlerMethodReturnValueHandlerComposite addHandler(HandlerMethodReturnValueHandler handler) {
		this.returnValueHandlers.add(handler);
		return this;
	}

	//添加返回值處理器
	public HandlerMethodReturnValueHandlerComposite addHandlers(List<? extends HandlerMethodReturnValueHandler> handlers) {
		if (handlers != null) {
			for (HandlerMethodReturnValueHandler handler : handlers) {
				this.returnValueHandlers.add(handler);
			}
		}
		return this;
	}

}


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品视频在线观看一区二区三区 | 久久久不卡国产精品一区二区 | 亚洲精品自产拍在线观看 | 欧美日韩一区二区三区四区 | 爱爱日韩 | 最近的中文字幕免费完整 | 鸥美性生交xxxxx久久久 | 国产欧美日韩综合二区三区 | 日本高清在线观看视频www | 国产精品久久久久无毒 | 欧美一级二级毛片视频 | a级做爰毛片视频免费看 | 久久精品国产线看观看亚洲 | 亚洲黄色大片 | 国产午夜毛片v一区二区三区 | 波多野结衣免费免费视频一区 | 波多野结衣在线观看一区二区三区 | 性做久久久久久免费观看 | 最近免费2019中文字幕大全 | 日韩在线一 | 最近中文字幕视频 | 亚洲高清日韩精品第一区 | 亚洲十欧美十日韩十国产 | a免费国产一级特黄aa大 | 羞羞动漫网页 | 午夜视频在线观看视频 | www.亚洲天堂.com | 欧美最猛黑人xxxx黑人猛交3p | 中文字幕在线第一页 | 美国一级毛片在线 | 日本免费爱爱视频 | 国产精品久久国产三级国不卡顿 | 人善交video欧美 | 欧美性受xxxx黑人xxxx | 五月天欧美 | 三级全黄在线观看www桃花 | 亚洲精品久久久久中文字幕一区 | 国产精品永久免费自在线观看 | 国产精品大白天新婚身材 | 欧美亚洲图片小说 | 日韩手机在线免费视频 |