Spring 框架中用到了那些设计模式

引言:

Spring是一款非常优秀的框架,下面我们简单梳理一下Spring框架中用到的一些设计模式,以及是如何使用的。

简单工厂模式: Spring 中的 BeanFactory 就是简单工厂模式的体现。根据传入一个唯一的标识来获得 Bean 对象,但是在传入参数后创建还是传入参数前创建,要根据具体情况来定。

工厂模式: Spring 中的 FactoryBean 就是典型的工厂方法模式,实现了 FactoryBean 接口的 bean是一类叫做 factory 的 bean。其特点是,spring 在使用 getBean() 调用获得该 bean 时,会自动调用该 bean 的 getObject() 方法,所以返回的不是 factory 这个 bean,而是这个 bean.getOjbect()
方法的返回值。

单例模式: 在 spring 中用到的单例模式有: scope=“singleton” ,注册式单例模式,bean 存放于
Map 中。bean name 当做 key,bean 当做 value。

原型模式: 在 spring 中用到的原型模式有: scope=“prototype” ,每次获取的是通过克隆生成的新实例,对其进行修改时对原有实例对象不造成任何影响。

迭代器模式: 在 Spring 中有个 CompositeIterator 实现了 Iterator,Iterable 接口和 Iterator 接
口,这两个都是迭代相关的接口。可以这么认为,实现了 Iterable 接口,则表示某个对象是可被迭
代的。Iterator 接口相当于是一个迭代器,实现了 Iterator 接口,等于具体定义了这个可被迭代的
对象时如何进行迭代的。

代理模式: Spring 中经典的 AOP,就是使用动态代理实现的,分 JDK 和 CGlib 动态代理。
适配器模式:Spring 中的 AOP 中 AdvisorAdapter 类,它有三个实现:
MethodBeforAdviceAdapter、AfterReturnningAdviceAdapter、ThrowsAdviceAdapter。Spring
会根据不同的 AOP 配置来使用对应的 Advice,与策略模式不同的是,一个方法可以同时拥有多个
Advice。Spring 存在很多以 Adapter 结尾的,大多数都是适配器模式。

观察者模式: Spring 中的 Event 和 Listener。spring 事件:ApplicationEvent,该抽象类继承了
EventObject 类,JDK 建议所有的事件都应该继承自 EventObject。spring 事件监听器:
ApplicationListener,该接口继承了 EventListener 接口,JDK 建议所有的事件监听器都应该继承
EventListener。

模板模式: Spring 中的 org.springframework.jdbc.core.JdbcTemplate 就是非常经典的模板模式
的应用,里面的 execute 方法,把整个算法步骤都定义好了。

责任链模式: DispatcherServlet 中的 doDispatch() 方法中获取与请求匹配的处理器
HandlerExecutionChain,this.getHandler() 方法的处理使用到了责任链模式。

注意: 这里只是列举了部分设计模式,其实里面用到了还有享元模式、建造者模式等。可选择性的回答,主要是怕你回答了迭代器模式,然后继续问你,结果你一问三不知,那就尴了尬了。

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

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

相关文章

【前端入门】设计模式+单多页+React

设计模式是一种解决特定问题的经验总结,它提供了经过验证的解决方案,可以在软件开发过程中使用。设计模式可以帮助前端开发人员更有效地组织和管理代码,并提供一种共享的语言和框架,以便与其他开发人员进行交流。 以下是一些常见…

vue3里面使用el-image-vie出现图片预览导致页面卡顿停止加载问题

需求:我们在使用element-plus组件里面的图片预览时候,通过点击按钮来实现图片预览的效果。在开发过程中我们会遇到图片预览的时候出现卡顿出不来,导致当前的页面停止加载了。 具体思路如下: 我们需要添加:preview-teleported“t…

可观测性在威胁检测和取证日志分析中的作用

在网络中,威胁是指可能影响其平稳运行的恶意元素,因此,对于任何希望避免任何财政损失或生产力下降机会的组织来说,威胁检测都是必要的。为了先发制人地抵御来自不同来源的任何此类攻击,需要有效的威胁检测情报。 威胁…

《WebGIS快速开发教程》第6版正式发布啦!

大家过完了一个开心快乐团圆的春节之后,现在也开始慢慢进入到工作和学习的节奏中去了,最近的这段时间是大家考研结果公布和换工作的高峰期,很多成绩不太理想的学生和即将打算换工作的同学都可能会想学习webgis相关,因此我们团队赶…

python学习笔记-关键字

Python中的关键字是一组被编程语言保留用于特定目的的单词。这些关键字具有特殊含义,不能被用作变量名或标识符。下面是python中的关键字: False await else import pass None break except in raise True …

Bicycles(变形dijkstra,动态规划思想)

Codeforces Round 918 (Div. 4) G. Bicycles G. Bicycles 题意: 斯拉夫的所有朋友都打算骑自行车从他们住的地方去参加一个聚会。除了斯拉维奇,他们都有一辆自行车。他们可以经过 n n n 个城市。他们都住在城市 1 1 1 ,想去参加位于城市…

Day 59 | 动态规划 583. 两个字符串的删除操作、 72. 编辑距离、编辑距离总结篇

583. 两个字符串的删除操作 题目 文章讲解 视频讲解 class Solution {public int minDistance(String word1, String word2) {int len1 word1.length();int len2 word2.length();int[][] dp new int[len1 1][len2 1];for (int i 1; i < len1; i) {for (int j 1; j …

华纳云:oracle数据库启动与关闭的方法

在Oracle数据库中&#xff0c;您可以使用 SQL*Plus 工具或者 SQL Developer 来启动和关闭数据库实例。以下是在 Oracle 数据库中启动和关闭数据库实例的一般步骤&#xff1a; 启动 Oracle 数据库实例&#xff1a; 使用 SQL*Plus 启动数据库&#xff1a; 打开终端或命令提示符窗…

c++学习:字符串string类

C语言中对字符串的表示通常用指针&#xff0c;新手会面临内存泄漏或者段错误等众多问题。 在 C 中&#xff0c; string 类是标准库的一部分&#xff0c;用于表示和操作字符串。它是对传统的 C 风格字符串&#xff08;以空 字符 \0 结尾的字符数组&#xff09;的一个更安全、更…

防御第六次作业

DPI DPI --- 深度包检测技术 --- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对数据包的内容进行识别。&#xff08;应用层&#xff09; 1&#xff0c;基于“特征字”的检测技术 --- 最常用的识别手段&#xff0c;基于…

dolphinscheduler海豚调度(三)SQL任务

在之前的博文中&#xff0c;我们已经介绍了DolphinScheduler海豚调度的基本概念和模块&#xff0c;安装部署和元数据切换&#xff0c;以及Shell任务的实践。今天&#xff0c;让我们来深入探讨DolphinScheduler中另一种常见的任务类型&#xff1a;SQL任务。 SQL任务是DolphinSc…

10:00面试,10:05就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司&#xff0c;期待着新的工作环境和机会。然而&#xff0c;新公司的加班文化让我有些始料未及。虽然薪资相对较高&#xff0c;但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时&#xff0c;公司突然宣布了一则令人…

如何做代币分析:以 TRX 币为例

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;TRX 代币仪表板 &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数据…

[python] `sys.settrace` 跟踪函数

sys.settrace 是 Python 中的一个调试工具&#xff0c;它允许你设置一个跟踪函数&#xff0c;在程序执行过程中对每个函数调用进行跟踪。当设置了跟踪函数后&#xff0c;Python 解释器在每次函数调用、返回或异常抛出时都会调用该跟踪函数&#xff0c;从而使你能够观察和记录程…

ffmpeg深度学习滤镜

环境搭建 安装显卡驱动 当前所用显卡为NVIDIA的P6000,在英伟达的官网上查看对应的驱动, 下载NVIDIA-Linux-x86_64-535.104.05.run并安装。 sudo ./NVIDIA-Linux-x86_64-535.104.05.run 安装成功后用nvidia-smi命令后查看 安装的cuda版本不能超过12.2,选择安装cuda11.8。…

Netty01NIO

NIO基础 NIO &#xff1a;non-blocking io 非阻塞 IO 笔记 www.zgtsky.top 网课&#xff1a;黑马Netty 三大组件 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以…

资料分析:常见关系

两数比关系 一、基础概念 1.产销率(工业产品销售率)是指工业企业在一定时期已经销售的产品总量与可供销售的工业产品总量之比。产品销售率是指报告期产品销售量与产品生产量的比率。是反映报告期工业企业产品产销衔接情况&#xff0c;反映产品生产、销售、流通及满足社会需要程…

Linux学习笔记11——用户组添加删除

Linux 是多用户多任务操作系统&#xff0c;换句话说&#xff0c;Linux 系统支持多个用户在同一时间内登陆&#xff0c;不同用户可以执行不同的任务&#xff0c;并且互不影响。 例如&#xff0c;某台 Linux 服务器上有 4 个用户&#xff0c;分别是 root、www、ftp 和 mysql&…

nginx实现http反向代理及负载均衡

目录 一、代理概述 1、代理概念 1.1 正向代理&#xff08;Forward Proxy&#xff09; 1.2 反向代理&#xff08;Reverse Proxy&#xff09; 1.3 正向代理与反向代理的区别 2、同构代理与异构代理 2.1 同构代理 2.2 异构代理 2.3 同构代理与异构代理的区别 二、四层代…

Linux离线安装Ansible

Linux离线安装Ansible 可自行去下载相关包,也可以给我评论留言,我发给大家 python -Vtar -zxvf setuptools-7.0.tar.gz cd setuptools-7.0/ python setup.py installtar -zxvf pycrypto-2.6.1.tar.gz cd pycrypto-2.6.1/ python setup.py install报错时 src/MD2.c:31:20: 致…