Spring框架中都用到了哪些设计模式?

大家好,我是锋哥。今天分享关于【Spring框架中都用到了哪些设计模式?】面试题。希望对大家有帮助;

Spring框架中都用到了哪些设计模式?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

Spring框架中使用了大量的设计模式,这些设计模式帮助Spring实现了灵活、可扩展、易维护的架构。以下是Spring中常见的一些设计模式:

1. 工厂方法模式(Factory Method Pattern)

工厂方法模式是Spring中广泛使用的设计模式,主要体现在Spring的IoC容器中。容器通过工厂方法来实例化Bean,而不是直接使用new关键字。工厂方法模式使得对象的创建和管理从使用者中解耦出来,具体的实例化细节交给容器。

  • 例如,ApplicationContextBeanFactory容器使用工厂方法创建和管理Bean实例。

2. 单例模式(Singleton Pattern)

Spring中的默认Bean作用域是单例模式,即每个Bean在整个Spring容器中只会存在一个实例。当容器启动时,所有标记为单例作用域的Bean都会被创建,并在整个应用程序生命周期中复用。这种模式确保了内存资源的高效利用。

  • 默认情况下,Spring容器中的Bean都是单例的。

3. 依赖注入(Dependency Injection, DI)

依赖注入本身是一种设计模式,用于实现控制反转(IoC)。Spring通过依赖注入来解耦对象之间的关系,而不是让对象自己管理依赖,Spring负责将依赖关系注入到对象中,从而提高了系统的灵活性和可维护性。

  • DI有不同的实现方式,如构造器注入、Setter注入、字段注入等。

4. 代理模式(Proxy Pattern)

Spring使用代理模式来实现AOP(面向切面编程)。代理模式通过在运行时创建一个代理对象,拦截对目标对象的访问,添加额外的行为(如日志、事务管理等)。Spring AOP基于JDK动态代理或CGLIB代理实现,代理模式允许在不修改目标对象的情况下,为其添加额外的行为。

  • 例如,Spring AOP使用JDK动态代理和CGLIB生成代理类。

5. 模板方法模式(Template Method Pattern)

模板方法模式定义了算法的骨架,而将某些步骤的实现延迟到子类中。Spring中的JdbcTemplateHibernateTemplateJmsTemplate等类使用了模板方法模式。它们将公共的操作封装在模板类中,而将具体的业务操作由用户实现,从而避免了重复代码。

  • 例如,JdbcTemplate提供了一种执行数据库操作的统一方式,用户只需要关注SQL语句的编写,底层的数据库连接管理和异常处理由JdbcTemplate处理。

6. 观察者模式(Observer Pattern)

Spring框架中的事件机制(如ApplicationEventApplicationListener)使用了观察者模式。Spring通过事件发布-订阅机制来解耦事件的发布者和监听者。当事件发生时,所有注册的监听器都会接收到事件通知,处理相应的业务逻辑。

  • 例如,ApplicationContext容器是事件源,而ApplicationListener是观察者,它们通过事件机制实现松耦合。

7. 策略模式(Strategy Pattern)

策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。Spring的HandlerMappingHandlerAdapter等组件使用了策略模式。它们允许根据不同的请求类型选择不同的处理策略(如基于注解的控制器、基于XML的控制器等)。

  • 例如,Spring MVC中的HandlerMapping根据请求的URL选择合适的处理方法。

8. 装饰者模式(Decorator Pattern)

装饰者模式允许在不改变对象本身的情况下,动态地添加功能。Spring中的**AOP(面向切面编程)**实现了装饰者模式,切面类通过装饰目标对象,添加额外的功能(如事务管理、日志记录等),而不修改目标对象的代码。

  • 例如,在Spring中,事务管理和日志记录是通过AOP切面动态地添加到Bean中的。

9. 适配器模式(Adapter Pattern)

适配器模式将一个类的接口转换成客户端期望的接口,使得不兼容的接口可以协同工作。Spring的HandlerAdapter就是一个适配器模式的例子。它适配了不同的处理器和请求方式,使得Spring MVC可以支持不同的控制器类型(如基于注解的控制器、基于XML的控制器等)。

  • 例如,Spring MVC中的HandlerAdapter适配不同的请求处理器。

10. 桥接模式(Bridge Pattern)

桥接模式通过将抽象和实现分离,使得两者可以独立变化。Spring中的数据源管理(如DataSource)和事务管理(如PlatformTransactionManager)使用了桥接模式,它们通过分离具体的数据库操作和事务管理逻辑,提高了灵活性和可扩展性。

  • 例如,JdbcTemplateHibernateTemplate通过桥接模式将不同的数据访问技术封装起来,使得应用程序可以独立选择不同的实现。

11. 建造者模式(Builder Pattern)

建造者模式提供了一个用于构建复杂对象的接口,而将对象的创建过程分离出来。Spring中的**BeanDefinitionBeanDefinitionBuilder**使用了建造者模式,允许构建和配置复杂的Bean定义。

  • 例如,BeanDefinitionBuilder用于构建BeanDefinition,为Bean提供详细的配置。

12. 责任链模式(Chain of Responsibility Pattern)

责任链模式使得多个对象有机会处理请求,避免了请求发送者和接收者的耦合。Spring的HandlerInterceptorFilter实现了责任链模式,允许多个拦截器或过滤器按顺序处理请求。

  • 例如,Spring MVC中的HandlerInterceptor链,允许多个拦截器按顺序处理请求。

总结

Spring框架巧妙地运用了多种设计模式,使得框架本身具有高内聚、低耦合、灵活可扩展等优点。Spring的设计模式不仅使开发者能够更方便地使用框架,还增强了框架的可维护性和可扩展性。

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

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

相关文章

Day1 25/2/14 FRI

【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p3&v…

软考高级《系统架构设计师》知识点(一)

计算机硬件 校验码 码距:就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。一般来说,…

DeepSeek免费部署到WPS或Office

部署到WPS - 通过OfficeAI插件接入: - 准备工作:安装最新版本的WPS Office软件;访问DeepSeek官网,点击右上角的“API开放平台”,登录账号(若无账号需先注册),登录成功后,…

基于vue3实现的课堂点名程序

设计思路 采用vue3实现的课堂点名程序&#xff0c;模拟课堂座位布局&#xff0c;点击开始点名按钮后&#xff0c;一朵鲜花在座位间传递&#xff0c;直到点击结束点名按钮&#xff0c;鲜花停留的座位被点名。 课堂点名 座位组件 seat.vue <script setup>//组合式APIimpo…

C语言的物联网

C语言在物联网中的应用 物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;是一个通过网络将各种物理设备连接起来的系统&#xff0c;使其能够收集和交换数据。随着技术的进步&#xff0c;物联网已经走入了我们的日常生活&#xff0c;并在智能家居、智能城市、…

数论补充 之 前后缀分解问题

文章目录 [0,i-1] 和 [i1,n-1] 共同作用3334,数组的最大因子得分238.除自身以外数组的乘积 对于前缀分解问题&#xff0c;我愿把它分为几个大问题&#xff1a;[0,i] 或 [i,n-1] 或 [l,r],或 [0,i-1] 和 [i1,n-1] 共同作用的问题 一般都是求解区间的和&#xff0c;乘积&#xff…

Winform禁止高分辨下缩放布局成功方法

Windows自动缩放布局会导致窗体上的按钮和文本挤在一起根本看不清楚。 那么该如何解决呢&#xff1f; 具体操作步骤如下&#xff1a; 1、在项目属性上切换到【安全性】菜单&#xff0c;勾选【启用ClickOnce安全设置】&#xff0c;然后立刻取消勾选&#xff1b; 为了生成app.…

matlab齿轮传动

实现齿轮啮合分析&#xff0c;齿轮传动非线性分析&#xff0c;对扭转振动方程组进行求解&#xff0c;可得到齿轮扭转角随时间变化相关参数 列表 齿轮传动非线性分析&#xff0c;对扭转振动方程组进行求解&#xff0c;可得到齿轮扭转角随时间变化相关参数/niu_gou_yuan_Rg.m , …

分享 UniApp 中超好看的卡片阴影样式

在 UniApp 开发中&#xff0c;页面的视觉效果对于提升用户体验至关重要。一个设计精美的卡片样式往往能让页面更加美观和吸引人&#xff0c;而阴影效果则是为卡片增添立体感和层次感的关键元素。今天&#xff0c;我就来和大家分享一个在 UniApp 中实现的卡片阴影样式&#xff0…

教程 | 从零部署到业务融合:DeepSeek R1 私有化部署实战指南

文章目录 1. 什么是 DeepSeek R1&#xff1f;a. 主要介绍a. 版本区别 2. 部署资源要求a. 硬件资源要求 3. 本地安装DeepSeek-R1a. 为什么选择本地部署&#xff1f;b. 部署工具对比c. 演示环境配置d. Ollama安装流程 4. 可视化工具a. 工具对比b. Open-WebUI部署 5. AI API应用a.…

Ubuntu22.04 使用useradd 创建用户时,没有创建家目录时,如何手动创建家目录

测试案例&#xff1a; 使用useradd不加参数创建test目录 如下可以看出使用 useradd 创建用户的时候默认不会创建家目录 rootlocal:~# useradd test rootlocal:~# id test uid1001(test) gid1001(test) groups1001(test) rootlocal:~# cat /etc/passwd | grep test test:x:1001:…

数据结构——队列、哈希存储(2025.2.11)

目录 一、队列 1.定义 2.应用 3.分类 &#xff08;1&#xff09;逻辑结构 &#xff08;2&#xff09;物理结构 顺序队列 链式队列 二、哈希存储 1.定义 2.哈希冲突 &#xff08;1&#xff09;开放定址法 &#xff08;2&#xff09;再哈希法 &#xff08;3&#xf…

【做一个微信小程序】校园地图页面实现

前言 上一个教程我们实现了小程序的一些的功能&#xff0c;有背景渐变色&#xff0c;发布功能有的呢&#xff0c;已支持图片上传功能&#xff0c;表情和投票功能开发中&#xff08;请期待&#xff09;。下面是一个更高级的微信小程序实现&#xff0c;包含以下功能&#xff1a;…

css: 针对属性left/right/top/bottom为啥设置transition动画不起作用

如题&#xff1a; 在css的position中 left/right/top/bottom 这类位置属性值如果考虑使用transition来添加动画&#xff0c;transition它会优先考虑left/top属性&#xff0c;而此时transition触发需要的是数值型属性&#xff0c;如果设置为auto则系统会默认不考虑将位置属性添加…

npm安装时无法访问github域名的解决方法

个人博客地址&#xff1a;npm安装时无法访问github域名的解决方法 | 一张假钞的真实世界 今天在用npm install的时候出现了github项目访问不了的异常&#xff1a; npm ERR! Error while executing: npm ERR! /bin/git ls-remote -h -t https://github.com/nhn/raphael.git np…

J Exp Clin Cancer Res (IF:11.4)|上海九院张建军团队发现SPP1+巨噬细胞在头颈癌中的促肿瘤机制

巨噬细胞是肿瘤免疫微环境&#xff08;TIME&#xff09;的重要组成部分&#xff0c;在不同癌症类型中表现出功能的多样性以及与预后的紧密联系。在多种癌症中&#xff0c;SPP1巨噬细胞已被发现是一种常见的肿瘤相关巨噬细胞&#xff08;TAM&#xff09;亚群&#xff0c;且与不良…

盛铂科技 SCP4006/4018/4040:国产袖珍式功率计 射频微波功率探头 平均功率计

在通信、电子测量等领域&#xff0c;功率计是确保信号稳定、系统高效运行的关键设备。盛铂科技自主研发的 SCP4000 系列自带 USB 接口的袖珍式 CW 信号平均功率计&#xff0c;以其卓越的性能、高性价比和便捷的操作&#xff0c;在众多同类产品中脱颖而出&#xff0c;成为行业内…

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析①】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase01 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月14日 关键词&#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-001测试用例 用例ID测试场景验证要点参考条款预期…

Docker+Jenkins自动化部署SpringBoot项目【详解git,jdk,maven,ssh配置等各种配置,附有示例+代码】

文章目录 DockerJenkins部署SpringBoot项目一.准备工作1.1安装jdk111.2安装Maven 二.Docker安装Jenkins2.1安装Docker2.2 安装Jenkins2.3进入jenkins 三.Jenkins设置3.1安装jenkins插件3.2全局工具配置全局配置jdk全局配置maven全局配置git 3.3 系统配置安装 Publish Over SSH …

基于角色访问控制的UML 表示

Michael E. Shin、Gail-Joon Ahn 著&#xff0c;UMLChina 译 摘要 在基于角色访问控制&#xff08;role-based access control&#xff0c;RBAC&#xff09;中&#xff0c;权限和角色相关&#xff0c;用户被当作相应角色的成员而获得角色的权限。RBAC 背后的首要动机是为了简…