【Spring】Spring框架中有有哪些常见的设计模式

Spring 框架中广泛运用了多种设计模式,今天让我们来学习一下

1. 单例模式(Singleton Pattern)

  • 用途:在Spring框架中,Bean默认是单例的,也就是说在容器中每种类型的Bean只有一个实例。这个设计可以节省资源,提高性能,因为我们不需要每次都创建新的实例。
  • 实现:当Spring容器启动时,会为每个作用域为singleton的Bean创建一个实例并保存起来。每次需要使用该Bean时,Spring会直接返回这个已存在的实例,避免重复创建。

2. 代理模式(Proxy Pattern)

  • 用途:Spring AOP(面向切面编程)大量使用代理模式来实现功能扩展,比如日志记录、事务管理等。代理对象在目标方法执行前后插入额外的操作。
  • 实现:Spring提供了两种代理方式:如果目标类实现了接口,就用JDK动态代理;如果没有接口,Spring则使用CGLIB动态代理生成目标类的子类。

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

  • 用途:该模式用于定义一个操作的框架,将具体实现交给子类来完成。在Spring中,很多数据库操作和事务管理都用到了模板方法模式。
  • 实现:比如,JdbcTemplate类就使用了模板方法模式,开发者只需关心SQL语句和参数,而Spring负责处理数据库连接、异常捕获和资源释放等细节。

4. 策略模式(Strategy Pattern)

  • 用途:通过将不同的算法封装在独立的类中,使得这些算法可以互换使用,而不影响客户端。Spring使用策略模式来实现各种可替换的算法和逻辑。
  • 实现:例如,在事务管理中,Spring提供了不同的事务策略(如JDBC和JTA);在视图解析中,Spring允许使用多种视图解析策略(如JSP、Thymeleaf等)。

5. 适配器模式(Adapter Pattern)

  • 用途:适配器模式用于将不同的接口进行适配,使得不兼容的接口能够协同工作。Spring的AOP和MVC框架就广泛使用了适配器模式。
  • 实现:在Spring MVC中,HandlerAdapter将不同类型的控制器(如HttpRequestHandlerController)适配为统一的处理接口,从而支持多种控制器类型。

6. 装饰器模式(Decorator Pattern)

  • 用途:装饰器模式允许在不改变对象本身的情况下,动态地为其添加功能。在Spring中,AOP本质上就是一种装饰器模式,它在目标对象上添加额外的行为。
  • 实现:通过代理对象,Spring AOP在目标方法调用前后执行增强操作,例如记录日志、管理事务等。

7. 观察者模式(Observer Pattern)

  • 用途:观察者模式使得组件之间可以实现松耦合的事件通信,Spring的事件机制就使用了这种模式。通过事件发布和订阅,组件之间可以在事件发生时互相通知。
  • 实现ApplicationEventPublisher用于发布事件,ApplicationListener用于监听事件。当事件被发布时,所有订阅了该事件的监听器都会得到通知。

8. 工厂模式(Factory Pattern)

  • 用途:Spring使用工厂模式来管理Bean的创建。通过BeanFactoryApplicationContext等接口,Spring能够将对象的创建与使用分离,从而提高程序的灵活性和可扩展性。
  • 实现BeanFactory是一个接口,提供了获取Bean的方法;而ApplicationContextBeanFactory的扩展,除了提供Bean获取功能外,还提供了事件处理、国际化支持

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

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

相关文章

一、HTML

一、基础概念 1、浏览器相关知识 这五个浏览器市场份额都非常大,且都有自己的内核。 什么是内核: 内核是浏览器的核心,用于处理浏览器所得到的各种资源。 例如,服务器发送图片、视频、音频的资源,浏览…

记录一次非常奇怪的MIME type of “text/html“报错

报错现象 访问指定地址,一直转圈打不开,打开游览器控制台发现有如下报错: Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “text/html”. Strict MIME type checking i…

Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式

Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式 1、所要用到的激活工具2、开启电脑卓越性能模式Windows11Windows10在电源模式中选择卓越性能模式 3、将系统版本切换为 工作站版本 1、所要用到的激活工具 KMS激活工具(…

膜计算 MATLAB例程(仅例程,无背景)

膜计算的实现可以用 MATLAB 进行简单的模拟。以下是一个基础的膜计算模型的示例代码,模拟了膜内部对象的产生和转化过程。这个例子使用简单的对象和规则来演示膜计算的基本思想。 文章目录 主要概念应用领域优势与挑战代码MATLAB 膜计算示例代码代码说明运行代码总结…

Request和Response

前言 这一节主要讲的是Request和Response还有一些实例 1. 介绍 就是这两个参数 WebServlet("/demo7") public class ServletDemo7 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletExcepti…

Vue全栈开发旅游网项目(10)-设计用户模型

1.设计用户模型 文件地址:accounts/models.py 1.1 用户详细信息 内容包括:性别 手机号 年龄 生日 真实姓名 创建常量:1-男,0-女;editableFalse不许循环 class Profile(models.Model):SEX_CHOICES{(1,男),(0,女)}u…

C++初阶——vector

一、什么是vector vector是表示可变大小的数组的序列容器,就像数组一样,vector也采用连续空间来存储元素。也就是说它的访问和数组一样高效,但是它的大小是动态可变的,并且它的大小会被容器自动处理。 二、vector的构造 常用的构…

迁徙线,动态轨迹线

使用canvas结合贝塞尔曲线实现&#xff0c;效果如下 <template><div class"box"><div class"mapBox"><div class"map"><img src"/img/dataCockpit/map.png" alt"" /><div class"dot&…

SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-39/ 本关是堆…

NVM 介绍及使用指南

在日常的开发工作中&#xff0c;我们往往会遇到需要在同一台机器上同时管理多个版本的 Node.js 的情况。为了解决这个问题&#xff0c;我一个同事推荐了NVM&#xff08;Node Version Manager&#xff09;。NVM 是一个用于管理 Node.js 版本的工具&#xff0c;可以方便地在不同的…

web——[SUCTF 2019]EasySQL1——堆叠注入

这个题主要是讲述了堆叠注入的用法&#xff0c;来复现一下 什么是堆叠注入 堆叠注入&#xff1a;将多条SQL语句放在一起&#xff0c;并用分号;隔开。 1.查看数据库的名称 查看数据库名称 1;show databases; 发现有名称为ctftraining的数据库 2.对表进行查询 1;show tabl…

【ARM】MDK-烧录配置文件无权限访问

【更多软件使用问题请点击亿道电子官方网站】 1、 问题场景 客户代码编译正常、调试出现报错<Error: Flash Download failed - "Cortex-M4"> 仿真器识别正常&#xff0c;keil-Debug内显示相关信息、设备启动正常。 记录排查步骤&#xff0c;找到配置文件位…

深度解析 ICP 备案、公安备案、等保备案编号与统一社会信用代码

1. 前言 在当今数字化时代&#xff0c;各类网站和系统如雨后春笋般涌现&#xff0c;为了确保网络安全、合法运营以及用户信息保护&#xff0c;不同类型的备案工作应运而生。其中&#xff0c;ICP 备案、公安备案和等保备案尤为重要&#xff0c;它们各自对应的备案编号不仅是一串…

11个简单易用的电商购物车设计案例

文章目录 前言正文1.扁平化设计购物车2.无表格布局购物车3.美食购物车4.响应式购物车5.jQuery购物车6.动态价格更新购物车7.标签式滑动购物车8.动态商店与购物车一体化设计9.简约清爽的购物车设计10.基于Vue.js的购物车11.域名购物车 总结 前言 现在的电子商务网站&#xff0c…

turtlesim修改窗口大小;添加自己的小乌龟;

目前手边有humble版本ROS。以此为教程。其他版本以此类推 github中搜索ros&#xff0c;然后选择ros官网&#xff08;九点方阵那个图标&#xff09;。然后 在branch中&#xff0c;选择humble&#xff0c;然后复制链接。 git clone https://github.com/ros/ros_tutorials.git -…

电阻按材料分类、不同的电阻

TOC 按电阻材料工艺进行分类 3.1.线绕电阻&#xff1a; 使用高电阻率的康铜、锰铜或镍铬合金丝缠绕在陶瓷骨架&#xff08;一般采用陶瓷、塑料、涂覆绝缘层的金属骨架&#xff09;上制作而成的。玻璃釉绕线电阻表面被覆一层玻璃釉&#xff1b;涂漆线绕电阻表面被覆一层保护有…

spark的学习-06

SparkSQL读写数据的方式 1&#xff09;输入Source 方式一&#xff1a;给定读取数据源的类型和地址 spark.read.format("json").load(path) spark.read.format("csv").load(path) spark.read.format("parquet").load(path) 方式二&#xff1a…

react-markdown内容宽度溢出和换行不生效问题

情景复现&#xff1a; 解决办法&#xff0c;添加样式进行限制 /* index.css */ .markdown-container {word-break: break-word; /* 强制长单词断行 */white-space: pre-wrap; /* 保留空白符序列&#xff0c;但是正常地进行换行 */overflow-wrap: break-word; /* 在长单词或…

java双向链表解析实现双向链表的创建含代码

双向链表 一.双向链表二.创建MyListCode类实现双向链表创建一.AddFirst创建&#xff08;头插法&#xff09;二.AddLast创建&#xff08;尾叉法&#xff09;三.size四.remove(指定任意节点的首位删除)五.removeAll(包含任意属性值的所有删除)六.AddIndex(给任意位置添加一个节点…

VMWare虚拟机NAT模式下与外部主机(非宿主机)通信

VMWare虚拟机NAT模式下与外部主机(非宿主机)通信 1. VMWare虚拟机网络 VMWare的三种网络工作模式&#xff1a; Bridged&#xff1a;桥接模式NAT&#xff1a;网络地址转换模式Host-Only &#xff1a;仅主机模式 VMWare 网络连接配置界面如下&#xff1a; 在本次测试环境中&a…