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

server/2024/11/14 12:33:44/

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.ppmy.cn/server/141569.html

相关文章

uni-app小程序echarts中tooltip被遮盖

图表中的文案过长,tooltip溢出容器,会被遮盖住 解决方案: 在echarts的tooltip中有confine属性可将tooltip限制在容器内,不超过容器,就不易被遮盖

(Termux)旧手机变Ubuntu服务器

目录 简介 配置termux软件 安装open-ssh 更新SSL 添加密钥 启动 ssh 服务 查看登录用户名 查看连接 IP 地址 设置ssh登录密码 通过 XShell 连接手机模拟 Linux 系统 注意:XShell 需要与该手机在同一局域网上才可以进行连接 手机开启的ssh服务默认端口为 …

算法基础02一高精度,前缀和,差分

#include <iostream> #include <vector> using namespace std;const int N 1e6 10; //模板 CABvector<int> add(vector<int> &A,vector <int> &B) {vector<int> C;int t 0; // 用来保存每位的和&#xff08;包括进位&#xff…

基于微信小程序的药店管理系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户功能模块&#xff1a;管理员&#xff08;用户管理、药品分类管理、药品信息管理、系统管理、订单管理等&#xff09;&#xff0c;普通用户&#xff08;查看相关药品信息、充值、登录注册、个人中心、购物车、我的订单等&#…

机器视觉中常用图像处理库都有哪些?重点关注.net

当需要做一些图像处理方面的学习和研究的时候&#xff0c;首要任务就是选择一套合适的图像处理类库&#xff0c;这期我们主要简单介绍下各家图像库的一些优缺点。OpenCV&#xff0c;Intel IPP&#xff0c;Halcon&#xff0c;MATLAB &#xff0c;OpenGL&#xff0c;EmguCv&#…

科技资讯|Matter 1.4 标准正式发布,低功耗蓝牙助力其发展

连接标准联盟&#xff08;CSA&#xff09;宣布推出最新的 Matter 1.4 版本&#xff0c;引入了一系列新的设备类型和功能增强&#xff0c;有望提高包括 HomeKit 在内的智能家居生态系统之间的互操作性。 设备供应商和平台能够依靠增强的多管理员功能改善多生态系统下的用户体验&…

微信小程序获取上一页的数据

使用方法&#xff1a;getCurrentPages() let pages getCurrentPages(); // 获取页面栈let prevpage pages[pages.length - 2]; // 上一个页面//存在上一页if (prevpage) {// 获取上一页data里的数据let data prevpage.data; // 修改上一页的数据prevpage.setData({ details…

科研绘图系列:R语言差异分析双侧柱状图(grouped barplot)

文章目录 介绍加载R包数据画图系统信息介绍 双侧柱状图(grouped barplot),也称为分组柱状图,是一种用于展示不同组别之间比较的数据可视化图表。它通过将不同组别的柱状图并排放置,可以直观地比较不同组在各个类别上的表现或特征。以下是双侧柱状图的一些关键特点和用途:…