在Spring 当中存在的八大模式

在Spring 当中存在的八大模式

文章目录

  • 在Spring 当中存在的八大模式
  • 每博一文案
  • 1. 简单工厂模式
  • 2. 工厂方法模式
  • 3. 单例模式
  • 4. 代理模式
  • 5. 装饰器模式
  • 6. 观察者模式
  • 7. 策略模式
  • 8. 模板方法模式
  • 最后:

每博一文案

我认为 “知世故而不世故” 才是真正意义上的成熟。回归到小孩子的纯真和本心,经过岁月的洗礼和自我挣扎,兜兜转转,最后回归本我,找回初心。然而“初心是什么?”是小孩子的本性?是不畏惧他人眼光勇于做自己?是抛开世俗的观念,兜兜转转绕回到原点的真实?还是和想爱的人在一起因为三观而非其他?是不把他人的想法驾凌在自己之上,是回归到本我?真正的勇敢,是在这现实的世界里,理性浪漫主义般的活着。理想主义的可爱会让一个人不那么世俗化。而非世俗化就会显得不世故,在一些人看来就是不成熟,于是就幼稚了。无论“幼稚”还是“成熟”,本质上都是每个人基于自己的个性特点和社会环境,所作出的选择。它意味着你能承担“幼稚”或“成熟”所带来的风险与损失,也努力追求它所带来的收益与快乐。如果我们承认,人和人与生俱来的不一样。也承认,在一个发达的现代社会,我们可以以无数种方式去获得成功。甚至,连成功的定义,都可以由自己决定。那么,我们的生命应该会活得自由、珍重,而更有质感一点点吧。

在 Spring 当中存在着如下23种设计模式当中的 八大模式

  1. 简单工厂模式
  2. 工厂方法模式
  3. 单例模式
  4. 代理模式
  5. 装饰器模式
  6. 观察者模式
  7. 策略模式
  8. 模板方法模式

1. 简单工厂模式

BeanFactory 的 getBean() 方法,通过唯一的标识来获取 Bean 对象,就是典型的简单工厂模式(静态工厂模式) 。简单工厂模式步属于23种设计模式的任何一种.

想要进一步,学习工厂方法模式,大家可以移步至:✏️✏️✏️ GoF之工厂模式-CSDN博客

2. 工厂方法模式

FactoryBean 是典型的工厂方法模式,在配置文件种通过 factory-method 属性来指定工厂方法,该方法时一个实例方法。

想要进一步,学习工厂方法模式,大家可以移步至:✏️✏️✏️ GoF之工厂模式-CSDN博客

3. 单例模式

Spring 用的是双重判断加锁的单例模式,请看下面代码:

在这里插入图片描述

由于单例模式,涉及的篇幅过多,大家可以移步至:✏️✏️✏️ 23种设计模式:单例设计模式(饿汉式 VS 懒汉式)_单件模式 饿汉式csdn-CSDN博客

4. 代理模式

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

想要进一步,更加深入的了解代理模式,大家可以移步至:✏️✏️✏️ GoF之代理模式(静态代理+动态代理(JDK动态代理+CGLIB动态代理带有一步一步详细步骤))-CSDN博客

5. 装饰器模式

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单词的类,都是装饰器模式。

6. 观察者模式

定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。Spring中观察者模式一般用在listener的实现。
Spring中的事件编程模型就是观察者模式的实现。

在Spring中定义了一个ApplicationListener接口,用来监听Application的事件,Application其实就是ApplicationContext,ApplicationContext内置了几个事件,其中比较容易理解的是:ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent

7. 策略模式

策略模式是行为性模式,调用不同的方法,适应行为的变化,强调父类的调用子类的特性。

getHandler 是 HandlerMapping 接口中的唯一方法,用于根据请求找到匹配的处理器。

比如我们自己写了 AccountDao 接口,然后这个接口下有不同的实现类:AccountDaoForMySQL,AccountDaoForOracle。对于service 来说不需要关心底层具体的实现,只需要面向 AccountDao 接口调用,底层可以灵活切换实现,这就是策略模式。

8. 模板方法模式

Spring 中的 JdbcTemplate 类就是一个模板类。

它就是一个模板方法设计模式的体现,在模板类的模板方法 execute() 中编写核心算法,具体的实现步骤在子类中完成。想要进一步了解,模板方法模式,大家可以移步至:✏️✏️✏️ 23种设计模式之 : 模板方法设计模式_模板实例的设计模式有哪些-CSDN博客

最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

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

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

相关文章

Micrometer中0.5 0.9 0.99三个百分位数详解

Micrometer的Timer类中的publishPercentiles方法使用0.5, 0.95, 0.99这三个百分位数,是因为它们在性能监控和SLA(Service Level Agreement,服务等级协议)指标测量中具有特定的意义和普遍应用。 在系统性能监控领域,这…

【PPT密码】PPT文件的两种不可编辑情况

不知道大家有没有遇到过,PPT文件无法编辑的情况,今天小编分享两种ppt文件不可编辑的原因以及解决方法。 情况一 如果打开ppt文件之后,发现幻灯片某些地方或者每张幻灯片同一个地方,无法编辑,这可能是因为PPT中设置了…

Scala学习笔记6: 类

目录 第六章 类1- 简单类和无参方法2- 带有getter和setter的属性3- 只带getter的属性4- 对象私有化5- 辅助构造器6- 主构造器7- 嵌套类end 第六章 类 在Scala中, 类用于创建对象的蓝图; 类可以包含方法、值、变量、类型、对象和特质等成员; 类名应该以大写字母开头, 可以包含…

ISCC 2024 部分wp

文章目录 一、Misc1、Number_is_the_key2、FunZip3、擂台—— 重“隐”;4、RSA_KU5、时间刺客6、成语学习7、 精装四合一8、钢铁侠在解密9、有人让我给你带个话10、Magic_Keyboard11、工业互联网模拟仿真数据分析 二、Web1、还没想好名字的塔防游戏2、代码审计3、原…

又一个换脸工具-swapface

网址 https://www.swapface.org/ 看官网支持windows和mac m1,我下载了但是我没安装,因为我的硬盘真的遭不住了。 可以去别的地方搜搜介绍,听说使用挺简单的。 但是我感觉还是rope比较好,其实rope已经很快了,就是没有gpu有点坑…

Python数据分析实验四:数据分析综合应用开发

目录 一、实验目的与要求二、主要实验过程1、加载数据集2、数据预处理3、划分数据集4、创建模型估计器5、模型拟合6、模型性能评估 三、主要程序清单和运行结果四、实验体会 一、实验目的与要求 1、目的: 综合运用所学知识,选取有实际背景的应用问题进行…

【Python】【Scrapy 爬虫】理解HTML和XPath

为了从网页中抽取信息,必须对其结构有更多了解。我们快速浏览HTML、HTML的树状表示,以及在网页上选取信息的一种方式XPath。 HTML、DOM树表示以及XPath 互联网是如何工作的? 当两台电脑需要通信的时候,你必须要连接他们&#xff…

Android Studio实现MQTT协议的连接

1添加依赖 在项目中找到下图文件 打开文件 如下 plugins {alias(libs.plugins.android.application) }android {namespace "com.example.mqtt_04"compileSdk 34defaultConfig {applicationId "com.example.mqtt_04"minSdk 27targetSdk 34versionCo…

树的层序遍历,平衡二叉树,以及反转二叉树

一、树的层序遍历 层序遍历的实现: 1.依赖于队列的数据结构 2.核心怎么实现: 1)创建一个队列的容器对象。 2)判断根节点是否为空,不为空则添加根节点到队列中。 3)遍历是一个循环性的工作,写…

小红书无限加群脚本无需ROOT【使用简单无教程】

小红书无限加群脚本无需ROOT,包含了对应的小红书版本【使用简单无教程】 链接:https://pan.baidu.com/s/1HkLhahmHDFMKvqCC3Q3haA?pwd6hzf 提取码:6hzf

【Vue】computed 和 methods 的区别

概述 在使用时,computed 当做属性使用,而 methods 则当做方法调用computed 可以具有 getter 和 setter,因此可以赋值,而 methods 不行computed 无法接收多个参数,而 methods 可以computed 具有缓存,而 met…

Stable Diffusion教程:从入门到精通

Stable Diffusion是一种基于深度学习的图像生成技术,能够生成高质量的图像,广泛应用于艺术创作、广告设计和游戏开发等领域。本教程将详细介绍Stable Diffusion的基础知识、安装和配置方法,以及如何使用它进行图像生成。 1. 什么是Stable Di…

Python函数、类和方法

大家好,当涉及到编写可维护、可扩展且易于测试的代码时,Python提供了一些强大的工具和概念,其中包括函数、类和方法。这些是Python编程中的核心要素,可以帮助我们构建高效的测试框架和可靠的测试用例。 本文将探讨Python中的函数、…

大语言模型的工程技巧(三)——分布式计算

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文将讨论如何利用多台机器进行神经网络的分布式训练。利用多台机器来加速大语言模型的训练,是其获得成功的重要原…

BUUCTF靶场[Web] [极客大挑战 2019]Havefun1、[HCTF 2018]WarmUp1、[ACTF2020 新生赛]Include

[web][极客大挑战 2019]Havefun1 考点:前端、GET传参 点开网址,发现是这个界面 点击界面没有回显,老规矩查看源代码,看到以下代码 代码主要意思为: 用get传参,将所传的参数给cat,如果catdog…

揭秘Spring Bean的生命脉搏:深度剖析构造方法的推断艺术

1. 引言 在Spring框架中,Bean的生命周期是一个至关重要的概念。从Bean的创建、初始化到销毁,每一个阶段都承载着框架与用户代码的交互。而在Bean的创建阶段,构造方法的推断显得尤为重要。本文将从源码层面深入剖析Spring是如何推断并选择构造…

程序员做副业项目,别把事情复杂化

赚钱,别把简单的事情复杂化 不要把简单的事情复杂化。在大多数情况下,你并不需要一个应用程序、一个小程序、一个公众号、一个微商城、编写深度文章、建立一个社群,甚至不需要所谓的个人品牌、IP或运营技巧。 你只需要一个装满5000个&#…

Linux基础(五):常用基本命令

从本节开始,我们正式进入Linux的学习,通过前面的了解,我们知道我们要以命令的形式使用操作系统(使用操作系统提供的各类命令,以获得字符反馈的形式去使用操作系统。),因此,我们是很有…

python将多个音频文件与一张图片合成视频

代码中m4a可以换成mp3,图片和音频放同一目录,图片名image.jpg,多线程max_workers可以根据CPU核心数量修改。 import os import subprocess import sys import concurrent.futures import ffmpeg def get_media_duration(media_path): probe ffmp…

Linkis踩坑记录

从WeDataSphere的docker镜像中把代码和配置拷贝到普通环境运行,结果linkis提交任务总是报错: Failed to execute task TaskID_1_otJobI d_astJob_0_codeExec_0 org.apache.linkis.orchestrator.ecm.exception.ECMPluginErrorException: errCode: 12003 …