Spring系列文章:Spring中的设计模式

news2024/10/11 19:15:34

一、简单⼯⼚模式

BeanFactory的getBean()⽅法,通过唯⼀标识来获取Bean对象。是典型的简单⼯⼚模式(静态⼯⼚模 式);

二、⼯⼚⽅法模式

FactoryBean是典型的⼯⼚⽅法模式。在配置⽂件中通过factory-method属性来指定⼯⼚⽅法,该⽅法 是⼀个实例⽅法。

三、单例模式

Spring⽤的是双重判断加锁的单例模式。请看下⾯代码,我们之前讲解Bean的循环依赖的时候⻅过:

四、 代理模式

Spring的AOP就是使⽤了动态代理实现的。

五、装饰器模式

JavaSE中的IO流是⾮常典型的装饰器模式。

Spring 中配置 DataSource 的时候,这些dataSource可能是各种不同类型的,⽐如不同的数据库: Oracle、SQL Server、MySQL等,也可能是不同的数据源:⽐如apache 提供的 org.apache.commons.dbcp.BasicDataSource、spring提供的 org.springframework.jndi.JndiObjectFactoryBean等。

这时,能否在尽可能少修改原有类代码下的情况下,做到动态切换不同的数据源?此时就可以⽤到装饰 者模式。

Spring根据每次请求的不同,将dataSource属性设置成不同的数据源,以到达切换数据源的⽬的。 Spring中类名中带有:Decorator和Wrapper单词的类,都是装饰器模式。

六、观察者模式

定义对象间的⼀对多的关系,当⼀个对象的状态发⽣改变时,所有依赖于它的对象都得到通知并⾃动更 新。Spring中观察者模式⼀般⽤在listener的实现。

Spring中的事件编程模型就是观察者模式的实现。在Spring中定义了⼀个ApplicationListener接⼝,⽤ 来监听Application的事件,Application其实就是ApplicationContext,ApplicationContext内置了⼏个 事件,其中⽐较容易理解的是:ContextRefreshedEvent、ContextStartedEvent、 ContextStoppedEvent、ContextClosedEvent

七、策略模式

策略模式是⾏为性模式,调⽤不同的⽅法,适应⾏为的变化 ,强调⽗类的调⽤⼦类的特性 。 getHandler是HandlerMapping接⼝中的唯⼀⽅法,⽤于根据请求找到匹配的处理器。

⽐如我们⾃⼰写了AccountDao接⼝,然后这个接⼝下有不同的实现类:AccountDaoForMySQL, AccountDaoForOracle。对于service来说不需要关⼼底层具体的实现,只需要⾯向AccountDao接⼝调 ⽤,底层可以灵活切换实现,这就是策略模式。

八、模板方法模式

Spring中的JdbcTemplate类就是⼀个模板类。它就是⼀个模板⽅法设计模式的体现。在模板类的模板⽅ 法execute中编写核⼼算法,具体的实现步骤在⼦类中完成

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

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

相关文章

英语单词(二)

1.int:整形 2.char:字符型 3.scanner:接受输入,扫描器 4.integer:整数,整形 5.type:类型 6.string:字符串类型 7.double:双精度浮点型

OpenRoads地形模型添加(增补)地形点

创建三维点,将创建的点对象添加到现有地形模型。 在ORD建模工作流: 地形、分析、点、分析点,在需要添加点的位置读出地模的高程(图1); 图1 几何、平面、点添加高程点,特征设为地形随机点、高…

双线性插值以及计算

参考视频:图像处理-双线性插值_哔哩哔哩_bilibili 双线性插值 双线性插值是一种常用的图像处理和计算机图形学技术,用于在离散像素网格上平滑地估算介于两个相邻像素之间的数值。这种插值方法通常用于图像放大、旋转和变换等操作,以改善图像…

操作系统 第二章 进程管理:进程与线程、处理机调度

目录 1.进程与线程 1.1进程的概念、组成、特征 1.1.1概念 1.1.2组成 进程控制块(PCB) 程序段 数据段 1.1.3特征 1.2进程的状态与转换 1.2.1进程的五种状态 1.2.2进程的状态转换 1.3进程控制 1.3.1如何实现原语的“原子性” 1.3.2进程的创建…

intellij debug模式提示 : Method breakpoints may dramatically slow down debugging

最近在搞一个搭建一个项目 , 项目搭建完之后发现启动不了 , 一直都是正在加载中 并且提示Method breakpoints may dramatically slow down debugging,百度之后才知道是打了方法断点的原因 , 之前不小心打了一个断点 解决办法 : 点击如下图所示的按钮 然后把有断点…

15:00面试,15:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,…

matlab之cell数组的详细用法

一、cell数组是什么? 在MATLAB中,Cell数组是一种特殊的数据结构,它可以存储不同类型的数据,包括数字、字符串、数组、结构体等。Cell数组是一种灵活的数据容器,可以方便地存储和处理不同类型的数据。 二、怎么使用ce…

算法通关村第十八关:白银挑战-回溯热门问题

白银挑战-回溯热门问题 回溯主要解决一些暴力枚举也搞不定的问题zh,例如组合、分割、子集、排列、棋盘等。 1. 组合总和问题 LeetCode39 https://leetcode.cn/problems/combination-sum/ 思路分析 如果不考虑重复,跟题目 LeetCode 113 类似 考虑重复…

Autowired members must be defined in valid Spring bean (@Component|@Service|…)

报错如下: 自动注入对象必须定义在有效的spring bean内,也就是说只有本身作为bean的类才能注入其他对象。 修正方法:在BookTest上加上Component注解

基于STM32F103 实现按键状态机

文章目录 开发板开发环境前言按键消抖按键硬件原理图软件延时实现思路 实验目的代码按键状态按键信息按键相关定义按键底层配置及状态获取 总结 开发板 正点原子STM32F103ZET6战舰 开发环境 stm32cubeMX Clion 前言 在单片机使用按键时,为了消除按键的抖动&…

【随想】每日两题Day.3(实则一题)

题目:59.螺旋矩阵|| 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: …

Python进阶方法-Decorator装饰器

前言 在Python中,decorator(装饰器)是一种特殊的函数,主要用于修改或增强其他函数的功能。它可以在不修改原函数代码的情况下,通过在原函数的定义之前使用语法糖来对其进行修饰。 Decorator装饰器的作用 Decorator的…

端口信息收集

一、服务端口介绍 在渗透测试中对服务端口的收集非常重要,通过扫描服务开放的端口可判断对应开启的服务,通过所提供的这些服务的已知漏洞就可进行攻击。知名端口(0-1023)固定分配给某些服务的,动态端口(10…

(高频面试1)Redis缓存穿透、缓存击穿、缓存雪崩

目录 一:缓存数据 1.1 应用场景 1.2:缓存数据出现的问题 1.2.1 缓存穿透 1.2.2 解决办法 1.2.3 缓存击穿 1.2.4 解决办法 1.2.5 缓存雪崩 1.2.6 解决办法 一:缓存数据 1.1 应用场景 数据库查询结果缓存是一种常见的缓存应用场景&a…

ansible 使用roles简单部署LAMP平台

目录 一、了解roles目录 二、基于构建LAMP平台创建roles目录 1、在192.168.115.148创建目录 2、书写php的测试页面 3、编写httpd角色的main.yml文件 4、编写mysql角色的main.yml文件 6、编写lamp的playbook 7、启动剧本 8、访问 一、了解roles目录 在Ansible中&#…

MultipartFile是什么

Multipart是一种file的类型 在我们进行文件上传时所发出的请求,我们页面对请求格式有明确的要求: 1.post提交表单方式 2.编码格式enctype必须是muitipart/form-data,这种格式适合传输数据量大的二进制数据文件 3.类型必须是file类 流程举例&#xf…

开源药店商城系统源码比较:哪个适合你的药品电商业务

在构建药品电商业务时,选择适合的药店商城系统源码是至关重要的决策之一。开源药店商城系统源码提供了快速入门的机会,但在选择之前,您需要仔细考虑您的需求、技术要求和可扩展性。本文将比较几个流行的开源药店商城系统源码,以帮…

追溯网络安全本源,原生安全范式框架v1.0外滩大会正式发布

9月8日,2023外滩大会网络安全分论坛在上海举行。论坛由蚂蚁集团和《信息安全研究》杂志社联合主办,以“开启原生安全范式,护航网络空间安全”为主题。会上蚂蚁集团与浙江大学网络空间安全学院重磅首发了一项引领性网络安全成果 “原生安全范式…

什么?你还不会打包给运维?!那快来看看

目录 一、首先是JAVA打包 我们只需要用maven打包即可,生成文件为xxxx.jar 二、Vue打包 而打包是运行 npm run build 只要把 dist 给运维就行了 PS:如果是线上运行,那你要注意 env这个文件!!! ​编辑…