- 前言
- 第一部分 核心实现
- 第 1 章 Spring 整体架构和环境搭建
- 第 2 章 容器的基本实现
- 第 3 章 默认标签的解析
- 第 4 章 自定义标签的解析
- 第 5 章 bean 的加载
- 第 6 章 容器的功能扩展
- 第 7 章 AOP
- 第二部分 企业应用
- 第 8 章 数据库连接 JDBC
- 第 9 章 整合 MyBatis
- 第 10 章 事务
- 第 11 章 SpringMVC
- 第 12 章 远程服务
- 第 13 章 Spring 消息
11.4.4 根据当前 Handler 寻找对应的 HandlerAdapter
在 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 接口。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论