HandlerAdapter适配器模式的源码分析
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,本篇文章为大家展示了HandlerAdapter适配器模式的源码分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SpringMVC中的HandlerAdap
千家信息网最后更新 2025年01月27日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 ListhandlerAdapters; 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安全错误
数据库的锁怎样保障安全
车企基础软件开发
cod18无法联机在线服务器
网络技术开发怎么做
宝山区海航软件开发诚信合作
29岁学软件开发来得及吗
储存文件用什么服务器
有线电视信号服务器连接失败
万智牌 起源 服务器
软件开发前期人数
软件开发是属于什么专科
海淀区正规软件开发资费
面试别再问我数据库的分库分表
中国联通公司邮箱服务器设置
大华ddns服务器
宁波章鱼软件开发有限公司
网络服务器网络存储功能齐全
数据库无法连接错误233
社交软件租服务器多少钱
数据库启动不了跟内存条有关系吗
风铃视频软件开发
平面设计和网络技术
软件开发xml居中代码
中卫信软件开发
网络安全信息化大赛
宁波 伺服软件开发
数据库系统安全规范
宇星魔指网络技术武汉有限公司
pfam数据库 书籍
南宁管理软件开发定制
莆田万兴网络技术