Spring中的适配器模式

在Spring MVC框架中,适配器模式主要体现在对不同类型的处理器(即Controller)的统一处理上。Spring MVC通过适配器模式来保证无论Controller的实现方式如何多样化,都能够被DispatcherServlet统一调用和管理。具体使用方式如下:

  1. 核心组件

    • DispatcherServlet:作为前端控制器,它是整个Spring MVC体系中的入口点,负责接收和分发用户的HTTP请求。
    • HandlerMapping:处理器映射器,用于根据请求信息找到对应的处理器(Controller)。
    • HandlerAdapter:处理器适配器,它的关键作用是充当DispatcherServlet与各种Controller之间的适配桥梁,确保即使Controller有不同的实现方式,也能够通过适配器来执行对应的操作。
  2. 适配器模式的具体应用

    • Spring MVC内置了多种HandlerAdapter实现,如RequestMappingHandlerAdapterSimpleControllerHandlerAdapter等,每种适配器分别针对不同类型的Controller进行适配。
    • 当DispatcherServlet通过HandlerMapping找到一个Controller后,它并不会直接调用Controller的方法,而是通过查找对应的HandlerAdapter来执行请求处理方法。
    • 不同的Controller(可能是基于注解的、实现了特定接口的或是继承自特定类的Controller)都有相应的适配器来支持,适配器通过调用Controller的实际处理方法,并将结果包装成ModelAndView对象返回给DispatcherServlet。
  3. 执行流程

    • 用户发起HTTP请求 -> DispatcherServlet接收到请求 ->
    • 调用HandlerMapping寻找合适的Controller ->
    • HandlerMapping返回找到的Controller及其对应的HandlerAdapter->
    • DispatcherServlet调用选定的HandlerAdapter的handle()方法 ->
    • HandlerAdapter调用Controller的处理方法 ->
    • Controller执行业务逻辑并返回处理结果 ->
    • HandlerAdapter将处理结果封装为ModelAndView对象 ->
    • DispatcherServlet进一步处理视图渲染并返回响应给客户端。

通过适配器模式,Spring MVC框架能够很好地支持控制器的不同实现方式,并保持框架本身的稳定性和扩展性,符合开闭原则,即在不修改原有代码的基础上,能够添加新的Controller类型和相应的适配器来支持新的功能。

Spring MVC中的RequestMappingHandlerAdapter是默认用来处理大多数注解驱动的Controller方法的适配器,包括但不限于@GetMapping@PostMapping@PutMapping@DeleteMapping等注解。RequestMappingHandlerAdapter会根据HTTP请求的方法类型来判断应该调用哪个Controller方法进行处理。在最新的Spring Boot及Spring Framework版本中,RequestMappingHandlerAdapter是处理大部分注解驱动控制器的核心适配器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何AI绘画(动漫风格)

绘画描述:一只金毛犬 绘画结果: 如何AI绘画(动漫风格): 关注一休哥助手微信公众号 点击小程序按钮打开一休哥助手小程序 切换到我,复制授权码 登录网站:https://www.fudai.fun/drawing&…

leetcode.45题:跳跃游戏II

Leetcode.45题:跳跃游戏II /* 题意的理解: nums[0] 只能跳 1 ~ nums[0]步 依次类推:从nums[0] - nums[n - 1] 最少需要多少步数 nums 2 3 1 1 4 nums[0] 2,初始只能跳 1/2步,如跳1步,达到nums[1] 而nums[1] 3,顾第二…

C++构造析构函数

说起默认成员函数,每一个C程序员都不会陌生,因为默认成员函数就如同是一栋大厦的地基。我们常说“基础不牢,地动山摇”,在这里得到充分的体现。本章介绍两种默认成员函数:构造函数和析构函数。 正文开始~~~ 构造函数 …

解决 Linux环境下 conda环境无法激活

文章目录 Linux环境下 conda环境无法激活 Linux环境下 conda环境无法激活 检查’.bashrc’ 文件 vim ~./.bashrc add export PATH"/home/[usr_name]/[miniconda3 or anacodna]/bin:$PATH" # commented out by conda initialize conda init 重启shell 重新尝试con…

网络篇01 | 入门篇

网络篇01 | 入门篇 01 各层协议目录[网络篇02 | 应用层 kcp(王者荣耀)](https://blog.csdn.net/qiushily2030/article/details/135835946)[网络篇03 | 应用层 quic](https://blog.csdn.net/qiushily2030/article/details/136192481)[网络篇04 | 应用层 m…

Stable Diffusion之文生图模型训练

1、数据准备 提前准备好一组相关的照片。 在线的图片处理网站 BIRME - Bulk Image Resizing Made Easy 2.0 (Online & Free) 将图片转成统一大小,支持批量处理,效率高 2、生成提示词 进入stable diffusion webui页面 旧版直接使用 train/proproc…

如何给自己的网站添加 https ssl 证书

文章目录 一、简介二、申请 ssl 证书三、下载 ssl 证书四、配置 nginx五、开放 443 端口六、常见问题解决(一)、配置后,访问 https 无法连接成功(二) 证书配置成功,但是访问 https 还是报不安全 总结参考资料 一、简介 相信大家都知道 https 是更加安全…

医院一站式后勤管理系统 processApkUpload.upload 任意文件上传漏洞复现

0x01 产品简介 医院一站式后勤管理系统由南京博纳睿通软件科技有限公司开发的一款基于现代医院后勤管理理念的业务系统,产品结合后勤业务管理特点,通过管理平台将后勤管理业务予以系统化、规范化和流程化,从而形成一套构建于平台之上且成熟完善的后勤管理体系,并可在此体系…

使用阿里云试用Elasticsearch学习:Search Labs Tutorials 搭建一个flask搜索应用

文档:https://www.elastic.co/search-labs/tutorials/search-tutorial https://github.com/elastic/elasticsearch-labs/tree/main/example-apps/search-tutorial Full-Text Search

Excel报表成果展示

采用Excel函数实现数据的快速计算,如下,看似很复杂,实际非常方便。

文献速递:深度学习肝脏肿瘤诊断---基于深度学习的肝细胞结节性病变在整片组织病理图像上的分类

Title 题目 Deep Learning-Based Classification of Hepatocellular Nodular Lesions on Whole-Slide Histopathologic Images 基于深度学习的肝细胞结节性病变在整片组织病理图像上的分类 Background 背景 Hepatocellular nodular lesions (HNLs) constitute a heterogen…

大模型拥有的数万亿个参数,这个指标如何理解

数万亿个参数这个指标是描述大型人工智能模型复杂度的一个方式。在这个上下文中,一个“参数”可以理解为模型中的一个配置或设置,它决定了模型在处理数据时的行为。这些参数在模型的训练过程中被调整和优化,以便模型能够更好地完成特定任务&a…

理解vuecli和nginx启动Vue项目区别

Vue CLI 和 Nginx 在启动 Vue 项目时各自扮演着不同的角色,它们之间存在一些关键的区别。以下是关于这两者的主要差异: 1.开发环境与部署环境: Vue CLI:Vue CLI 是一个基于 Node.js 的开发工具,主要用于在本地开发环…

面试八股——JVM★

类加载 类加载器的定义 类加载器的类别 类装载的执行过程 类的装载过程: 加载: 验证: 准备: 这里设置初始值并不是传统意义的设置初始值(那个过程在初始化阶段)。 解析: 初始化: …

序列化结构(protobuf)实现一个TCP服务器(C++)

Protocol Buffers(protobuf)是一种由Google开发的用于序列化结构化数据的方法,通常用于在不同应用程序之间进行数据交换或存储数据。它是一种语言无关、平台无关、可扩展的机制,可以用于各种编程语言和环境中。 1、首先建立proto文…

Linux服务器下安装Oracle数据库

Linux服务器下安装Oracle数据库详细说明文档:https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Oracle/Linux%E4%B8%8B%E5%AE%89%E8%A3%85Oracle.md ps:如果觉得作者写的还行,能够满足您的需求,请给作者的开源项目st…

白杨SEO:把AI结合SEO优化的工具有哪些?我常用的AIGC工具分享

前言:这是白杨SEO原创第523篇。为什么想到写这个?因为有好几个朋友问我做SEO主要用哪个AI工具来创作?所以就分享一下我用的工具,希望对大家有一点点帮助,需要的可以收藏。图片在公众号白杨SEO上去看。 声明&#xff1…

k8s中修复mongodb启动失败

背景 同事反馈 dev环境的yapi不能登录,看了一下是同事两年前用helm搭建的。单副本使用。 排查发现是后端数据库mongodb数据库挂掉。 rootdev-k8s-master03:~# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mo…

湘潭大学-编译原理-实验一+实验二

了解了DFA的化简的含义,按照笔者的理解,表示的意思是把集合不断进行划分,直到不可以再进行划分,划分的依据是当前的符号到下一个符号,到达的这些下一个符号,是否属于同一个集合,假设属于同一个集…

李廉洋;4.12现货黄金,美原油最新走势分析及策略。

现货黄金在美盘末将历史新高刷至2377美元/盎司。美国3月份PPI指数较上年同期上升2.1%,为11个月来的最高增幅,这份数据加之此前火爆的CPI指数,为美联储实现2%目标所面临的坎坷之路奠定了基础。不过,PPI报告中的细节让担心通胀再度加…