springMVC源码分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)
来源:互联网 发布:dnf制卡辅助与端口辅助 编辑:程序博客网 时间:2024/06/10 14:29
在上一篇博客 springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)我们介绍了返回值解析器HandlerMethodReturnValueHandler,接触到了HandlerMethodReturnValueHandlerComposite,简单来说HandlerMethodReturnValueHandlerComposite其实就是springMVC提供的所有的HandlerMethodReturnValueHandler集合,它定义了一个链表用于存储所有实现的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的实现类去处理@Overridepublic 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;}//处理返回值@Overridepublic 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);}//查找是否处理返回值的HandlerMethodReturnValueprivate 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;}@Overridepublic 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;}}
1 0
- springMVC源码分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)
- springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)
- springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(二)
- springMVC源码解析--ViewResolverComposite视图解析器集合(二)
- SpringMVC源码分析(二)
- springMVC源码分析--ViewNameMethodReturnValueHandler返回值处理器(三)
- springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)
- springMVC源码分析--RequestParamMethodArgumentResolver参数解析器(三)
- springMVC源码分析--ViewResolver视图解析器(一)
- springmvc 之视图解析器源码分析
- springMVC源码分析--HandlerInterceptor拦截器调用过程(二)
- springMVC源码分析--HandlerInterceptor拦截器调用过程(二)
- springMVC源码分析--AbstractHandlerMapping(二)
- springMVC源码分析--SimpleServletHandlerAdapter(二)
- springMVC源码分析--AbstractHandlerMapping(二)
- java集合源码解析(二)--AbstractCollection
- Java集合源码解析(二)HashMap源码解析
- springMVC原理(二):SpringMVC核心分发器DispatcherServlet分析[附带源码分析]
- tomcat 字符编码问题 URIEncoding="UTF-8"
- 将一个正整数拆分成若干个互不相同的正整数且乘积最大(JS)
- (POJ 1947)Rebuilding Roads <树型DP>
- 人只要脾气好,凡事就会好
- 检测点9.2
- springMVC源码分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)
- 透视学理论(十)
- PHP实现微信开放平台扫码登录源码下载
- 基于web的全景漫游自动生成加编辑平台的技术实现(四)----添加热点
- day 04 考不完的试
- 准备回家了
- 《Python自然语言处理》练习1
- 解决windows server 2012安装AD RMS出现的“index was out of range”问题
- 分割整数,使其相加和最大