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

2023-11-17

一、简单⼯⼚模式

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中编写核⼼算法,具体的实现步骤在⼦类中完成

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • vscode运行C语言踩坑记

    前言 本文对Vscode运行C语言代码报错进行整理 重点是头文件路径正确仍然报错找不到路径的解决办法 需要注意 VScode本身不具有编译运行代码能力 所以需要先安装对应的编译环境并下载插件 已安装编译器软件的可以参考如下连接进行配置 Vi
  • Kali之Web渗透-扫描工具-Burpsuite

    在学习Burpsuit之前 我先说一下什么是代理 就是代理网络用户去取得网络信息 作为一个在浏览器和目标应用程序之间的中间人 允许你拦截 查看 修改在两个方向上的原始数据流 形象地说 它是网络信息的中转站 一般情况下 我们使用浏览器直接去连
  • 无需破解,Python这个神器帮你免费获取资源,赶紧收藏!

    球鞋那么难抢 有没有抢限量版球鞋的神器 每当限量版球鞋开售的时候 几十万人一拥而入 能抽中的却是少数 朋友圈刷到别人中标的消息 心里又羡慕又有点酸 今年DUNK推出的时候 我表弟竟然中了两双 他跟女朋友一人一双 这运气太好了吧 他跟我炫耀的
  • 拯救者R7000P(R7 4800H + RTX 2060)安装ubuntu18.04时黑屏,无法进入安装界面

    问题描述 插入启动盘选择u盘启动后能进入GNU GRUB 选择Try ubunut或Install ubuntu后黑屏或报错 无法正常安装 常见于搭载nvidia系列显卡且无核显或集显的电脑 也发生在有核显但为AMD处理器的电脑上 原因分析
  • stata-描述性统计分析和回归指令

    文章目录 1 简单描述性统计分析 2 bootstrap统计量 有置信区间 前文中提到如何将xls格式的数据读入stata并且将其转换为dta格式的数据 向stata中加载数据并且转换为dta格式之后读取 1 简单描述性统计分析 在读入数据
  • python中if __name__ == '__main__': 的解析

    python中if name main 的解析 当你打开一个 py文件时 经常会在代码的最下面看到if name main 现在就来介 绍一下它的作用 模块是对象 并且所有的模块都有一个内置属性 name 一个模块的 name 的值取决于您
  • Spring-boot 结合Thymeleaf--拦截器--文件上传

    目录 Spring boot 结合Thymeleaf 官方文档 基本介绍 Thymeleaf 是什么 Thymeleaf 的优点 Thymeleaf 的缺点 Thymeleaf 机制说明 Thymeleaf 语法 表达式 1 表达式一览 2
  • 柏睿java实习一面面经分享

    说一下list下面的类都有哪些 ArrayList和LinkedList的特点 jvm堆内存模型 jvm的垃圾回收算法都有哪些 简单描述一下它们事务的特性你对sql的优化了解多少 它有哪些方法 数据库的锁都有哪些 分别叙述下它们说一下lin
  • 在共享dll中使用mfc_实战经验:在DLL中支持多语言

    在主程序中支持多语言 在主程序中建立不同的语言资源字符串 并调用API函数SetProcessPreferredUILanguages设置当前语言就可以实现多语言特性 在DLL中支持多语言 1 因为DLL是主程序加载阶段载入到进程地址空间的
  • node调用ffmpeg转流

    ffmpeg始终是音视频领域绕不过去的一个坎 也是一个特别好的工具 虽然再node库里面有根据ffmpeg编译的库 比如 libav js和fluent ffmpeg之类 但是调用原生的ffmpeg应用也是一种方法 这边先上代码再详解 H2
  • 蚁群算法解决TSP(旅行商)问题

    文章目录 一 前言 蚁群算法的基本原理 其中的基本过程 二 状态问题 1 城市被选择的概率由距离和信息素浓度共同决定 2 信息素更新 三 整体实现 一 前言 蚁群算法 Ant Colony Optimization ACO 是一种模拟自然界
  • vmware workstation 提示程序包可能有错,错误代码 29141 & 提示不可恢复错误: (vcpu-0)...

    问题一 提示程序包可能有错 错误代码 29141 换了n个版本 vmware workstation 10 11 12 下载了n次 都提示该错误 29141 明明程序包没错啊 一开始还怀疑是我的操作系统是win 10导致的 但是看网上别人都
  • 深入理解synchronized底层原理,一篇文章就够了!

    文章目录 前言 一 synchronized的特性 1 1 原子性 1 2 可见性 1 3 有序性 1 4 可重入性 二 synchronized的用法 三 synchronized锁的实现 3 1 同步方法 3 2 同步代码块 四 syn
  • 程序员有多难?测试适不适合女孩子做?看完这篇文章你就懂了

    一 程序员压力很大 压力是相对的 这个主要是去看跟谁比 做销售压力大吗 做市场压力大吗 做运营压力大吗 做产品压力大吗 压力大吗 肯定大呀 你看那些 996 的程序员都在那泣不成声了 好不容易说出这句话 有什么压力呀 955公司的程序员在旁
  • QT多进程

    QT多进程 sf2gis 163 com 2014年11月6日 1 目的 启动可执行文件 2 原理 启动进程 并模拟命令行进行交互 3 方法 QProcess std system 3 1 QProcess 1 启动程序 可以使用start
  • 为你推荐10款开发常用的代码编辑器

    代码编辑器对于程序员来说十分重要 一个好的编辑器可以节省开发时间 提高工作效率 这篇文章会介绍10个优秀且免费的编辑器 它们都是非常方便易用的环境 你可以用它们来编写代码 查看源文件和文档等 简化你的工作 本文由PHP100中文网编译 转载
  • mysql监控指标_mysql主要性能监控指标

    1 系统mysql的进程数 ps ef grep mysql grep v grep wc l 2 Slave running mysql gt show status like Slave running 如果系统有一个从复制服务器 这个
  • QT找不到依赖库的解决办法

    QtCreator打开例程后 需要切换到 项目 页面 手动去掉勾选Shadow build 否则自动生成的构件目录里找不到依赖文件 编译出错
  • 230. Kth Smallest Element in a BST

    查找二叉搜索树的第K小节点 利用bst的中序遍历的性质 bst 中序遍历可以得到一个有序数组 每次从stack中弹出一个元素 看k 进行计数即可 Inorder Traversal We can inorder traverse the t
  • Spring系列文章:Spring中的设计模式

    一 简单 模式 BeanFactory的getBean 法 通过唯 标识来获取Bean对象 是典型的简单 模式 静态 模 式 二 法模式 FactoryBean是典型的 法模式 在配置 件中通过factory method属性来指定 法 该