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

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

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

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

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

}


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩国产精品久久久久久亚洲 | 亚洲在线一区 | 国产精品久久久久久久免费软件 | 97总资源 | 精品午夜视频 | 中文一区| 日韩av片在线 | 亚洲国产精品人人爽夜夜爽 | 91福利网站 | 激情在线视频 | 日韩欧美视频一区 | 亚洲第十页 | 欧洲三级在线 | 日韩欧美二区 | 成人自拍偷拍 | 欧美在线色 | 青草福利 | 国产一区二区三区免费观看 | 在线天堂av | 日韩欧美精品一区二区 | 日韩成人久久 | 国产不卡一区 | 国产成人网 | 青草青青在线视频 | 久久精品1 | 成人精品免费视频 | 日本久久一区二区 | 免费在线成人 | 性欧美xxxxporn | 国产精品国产精品国产专区不片 | 国产一区亚洲二区 | 日韩av手机在线观看 | 精品福利在线 | 久久久99国产精品免费 | 亚洲 自拍 另类 欧美 丝袜 | 一本色道久久88综合亚洲精品ⅰ | 九九热在线免费视频 | 在线观看国产一区 | a视频在线观看免费 | 一二三区在线观看 | 国产日本亚洲 |