返回介绍

1.4 HandlerAdapter 初始化

发布于 2025-10-03 18:08:53 字数 2303 浏览 0 评论 0 收藏

同样,我们以 RequestMappingHandlerAdapter 为例进行说明,类图:

RequestMappingHandlerAdapter 类图

显然,入口在 afterPropertiesSet 方法:

@Override
public void afterPropertiesSet() {
    // Do this first, it may add ResponseBody advice beans
    initControllerAdviceCache();
    if (this.argumentResolvers == null) {
        List<HandlerMethodArgumentResolver> resolvers = getDefaultArgumentResolvers();
        this.argumentResolvers = new HandlerMethodArgumentResolverComposite()
            .addResolvers(resolvers);
    }
    if (this.initBinderArgumentResolvers == null) {
        List<HandlerMethodArgumentResolver> resolvers = getDefaultInitBinderArgumentResolvers();
        this.initBinderArgumentResolvers = new HandlerMethodArgumentResolverComposite()
            .addResolvers(resolvers);
    }
    if (this.returnValueHandlers == null) {
        List<HandlerMethodReturnValueHandler> handlers = getDefaultReturnValueHandlers();
        this.returnValueHandlers = new HandlerMethodReturnValueHandlerComposite()
            .addHandlers(handlers);
    }
}

@ControllerAdvice

initControllerAdviceCache 方法用以解析并存储标注了 @ControllerAdvice 的 bean,这东西是干什么的参考:

Spring3.2 新注解 @ControllerAdvice

参数解析器

HandlerMethodArgumentResolver 即参数解析器,负责从 request 中解析、得到 Controller 方法所需的参数。afterPropertiesSet 方法设置了一组默认的解析器。具体是哪些参考 getDefaultArgumentResolvers 方法。类图:

HandlerMethodArgumentResolver 类图

@InitBinder 支持

此注解定义的其实是自定义类型转换器。使用方法参考:

springMVC @initBinder 使用

getDefaultInitBinderArgumentResolvers 返回了一组默认使用的转换器,不过其实这里的转换器和上面的参数解析器其实是一个类型的,这里留个坑。

返回结果解析器

HandlerMethodReturnValueHandler 接口用以处理方法调用(Controller 方法) 的返回值,类图:

HandlerMethodReturnValueHandler 类图

getDefaultReturnValueHandlers 方法便返回了一坨这东西。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。