HandlerAdapter适配器模式的源码分析
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章为大家展示了HandlerAdapter适配器模式的源码分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SpringMVC中的HandlerAdap
千家信息网最后更新 2025年12月02日HandlerAdapter适配器模式的源码分析
本篇文章为大家展示了HandlerAdapter适配器模式的源码分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
SpringMVC中的HandlerAdapter适配器
什么是适配器模式
定义:将一个系统的接口转换成另外一种形式,从而使原来不能直接调用的接口变得可以调用。
适配器模式应用场景
Mybatis多种日志框架的整合
SpringMVC适配器模式
新老版本的兼容问题
SpringMVC适配器模式源码分析
1、通过URL找到具体的请求方法
mappedHandler = this.getHandler(processedRequest);
在这里进行初始化三个适配器
先走父类
返回true
protected boolean supportsInternal(HandlerMethod handlerMethod) { return true;}拿到对应的适配器
HandlerAdapter接口看下所有适配器类型
下面看下这几种适配器:
AbstractHandlerMethodAdapter implements HandlerAdapter
public final boolean supports(Object handler) { return handler instanceof HandlerMethod && this.supportsInternal((HandlerMethod)handler);}HttpRequestHandlerAdapter implements HandlerAdapter
public boolean supports(Object handler) { return handler instanceof HttpRequestHandler;}RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
protected boolean supportsInternal(HandlerMethod handlerMethod) { return true;}SimpleControllerHandlerAdapter implements HandlerAdapter
public boolean supports(Object handler) { return handler instanceof Controller;}SimpleServletHandlerAdapter implements HandlerAdapter
public boolean supports(Object handler) { return handler instanceof Servlet;}
继承Controller方式所使用的适配器:SimpleControllerHandlerAdapter
HTTP请求处理器适配器:HttpRequestHandlerAdapter
注解方式(@Controller)的处理器适配器:RequestMappingHandlerAdapter
如果不采用适配器的话
If(hanlder instanceof Controller){ // 执行Controller适配器}If(hanlder instanceof HttpControler){ // 执行我们的HttpController}If(hanlder instanceof ServletControler){ // 执行我们的HttpController}If(hanlder instanceof AnnotationControler){ // 执行我们的AnnotationController}简单实现接口
@Controller("/httpRequestHandler")public class ExtHttpRequestHandlerAdapter implements HttpRequestHandler { @Override public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("httpRequestHandler"); }}这个时候就会执行到HttpRequestHandlerAdapter适配器
模拟SpringMVC适配器模式
HandlerAdapter
public interface HandlerAdapter { /** * 根据hanlder判断是那个HandlerAdapter类型 如果找到对应的类型话返回true */ boolean supports(Object handler); /** * 执行我们的请求方法 */ void handle(Object handler);}HandlerAdapter子类
public class AnnotationHandlerAdapter implements HandlerAdapter { /** * 注解形式的适配器 */ public boolean supports(Object handler) { return (handler instanceof AnnotationController); } public void handle(Object handler) { ((AnnotationController) handler).hanlder(); }}public class HttpRequestHandlerAdapter implements HandlerAdapter { /** * Http类型 适配器 */ public boolean supports(Object handler) { return (handler instanceof HttpController); } public void handle(Object handler) { ((HttpController) handler).hanlder(); }}Controller
public interface Controller {//请求方法void hanlder();}Controller子类
public class AnnotationController implements Controller { public void hanlder() { System.out.println("AnnotationController"); }}public class HttpController implements Controller { public void hanlder() { System.out.println("HttpController"); }}DispatcherServlet
public class DispatcherServlet { private List handlerAdapters; public DispatcherServlet() { handlerAdapters = new ArrayList(); handlerAdapters.add(new HttpRequestHandlerAdapter()); handlerAdapters.add(new AnnotationHandlerAdapter()); } public void dispatcher() { // 1. 已经获取到hanlderAnnotationController hanlder = new AnnotationController(); // 2.获取具体适配器HandlerAdapter handlerAdapter = getHandlerAdapter(hanlder); // 3.执行我们的请求方案handlerAdapter.handle(hanlder); } public HandlerAdapter getHandlerAdapter(Controller controller) { if (this.handlerAdapters != null) { for (HandlerAdapter ha : this.handlerAdapters) { if (ha.supports(controller)) { return ha; } } } return null; } public static void main(String[] args) { new DispatcherServlet().dispatcher(); }} 上述内容就是HandlerAdapter适配器模式的源码分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
适配器
适配
模式
接口
类型
源码
分析
方法
内容
处理器
子类
形式
技能
方式
注解
知识
处理
简明
简明扼要
三个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全主题课堂设计
手游lol国际服对战服务器延迟
项目网络安全防范措施
在线代理服务器最干净
网络安全搜集哪些数据
数据库的简单查询实践报告
数据库链接下载zip
操作数据库的页面流程
怎样建立数据库服务器
linux链接mysql数据库
数据库读取的HTML没解析
云管理服务数据库运维技术方案
浩瀚星云网络技术有限公司待遇
我的世界官网查询手机版服务器
suma服务器安装centos
web用哪种软件开发
园区网络部署是计算机网络技术吗
江西省银行网络安全
软件开发商务文件有哪些
计算机网络技术基础h
软件开发的研发费用比例
中国联通广东分公司软件开发
泰安联想服务器哪家是专业做的
淳化网络安全宣传
xx市网络安全工作规则
实现linux服务器互相通信
拳头平台无法连接服务器
安卓数据库增删改查卡顿
网络安全研究预期成果
网络安全界的3大公司