Spring mvc之HandlerMethodReturnValueHandlerComposite类

通过委托给已注册HandlerMethodReturnValueHandlers的列表来处理方法返回值。以前解析的返回类型被缓存以加快查找速度。
类图如下:


Spring mvc之HandlerMethodReturnValueHandlerComposite类_第1张图片
image.png

该类实现了HandlerMethodReturnValueHandler接口,维护了一个List集合HandlerMethodReturnValueHandler类型的returnValueHandlers 容器,如下:

private final List returnValueHandlers = new ArrayList<>();

1.2 handleReturnValue方法

迭代注册的HandlerMethodReturnValueHandlers并调用支持它的Handlers。

2. HandlerMethodReturnValueHandler接口

3. AsyncHandlerMethodReturnValueHandler接口

类图如下:


Spring mvc之HandlerMethodReturnValueHandlerComposite类_第2张图片
image.png

支持异步类型的返回值处理程序。这样的返回值类型需要优先处理,以便异步值可以“展开”。

注意:不需要实现这个契约,但是当处理程序需要优先于其他处理程序时,应该实现这个契约。例如,自定义(异步)处理程序,默认情况下在内置处理程序之后排序,应该优先于 @ResponseBody o或@ModelAttribute 处理程序,这应该在异步值就绪后发生。相比之下,内置(异步)处理程序的顺序早于同步处理程序。
接口定义如下:

public interface AsyncHandlerMethodReturnValueHandler extends HandlerMethodReturnValueHandler {

    boolean isAsyncReturnValue(@Nullable Object returnValue, MethodParameter returnType);

}

继承自HandlerMethodReturnValueHandler 接口,新增加了isAsyncReturnValue方法。它用于对给定的返回值是否表示异步计算。

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

你可能感兴趣的:(Spring mvc之HandlerMethodReturnValueHandlerComposite类)