返回介绍

11.4.4 根据当前 Handler 寻找对应的 HandlerAdapter

发布于 2025-04-22 22:09:17 字数 1156 浏览 0 评论 0 收藏

在 WebApplicationContext 的初始化过程中我们讨论了 HandlerAdapters 的初始化,了解了在默认情况下普通的 Web 请求会交给 SimpleControllerHandlerAdapter 去处理。下面我们以 SimpleControllerHandlerAdapter 为例来分析获取适配器的逻辑。

protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {

  for (HandlerAdapter ha : this.handlerAdapters) {

   if (logger.isTraceEnabled()) {

    logger.trace("Testing handler adapter [" + ha + "]");

  }

   if (ha.supports(handler)) {

    return ha;

  }

 }

  throw new ServletException("No adapter for handler [" + handler +

  "]: Does your handler implement a supported interface like

 Controller?");

}

通过上面的函数我们了解到,对于获取适配器的逻辑无非就是遍历所有适配器来选择合适的适配器并返回它,而某个适配器是否适用于当前的 Handler 逻辑被封装在具体的适配器中。进一步查看 SimpleControllerHandlerAdapter 中的 supports 方法。

public boolean supports(Object handler) {

  return (handler instanceof Controller);

}

分析到这里,一切已经明了,SimpleControllerHandlerAdapter 就是用于处理普通的 Web 请求的,而且对于 SpringMVC 来说,我们会把逻辑封装至 Controller 的子类中,例如我们之前的引导示例 UserController 就是继承自 AbstractController ,而 AbstractController 实现 Controller 接口。

发布评论

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