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

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获取功能外,还提供了事件处理、国际化支持
相关推荐
Lumos_7771 分钟前
Linux -- 线程
java·jvm·算法
知兀15 分钟前
【MybatisPlus】后端用枚举类,数据库用tinyint,存在枚举类型转换
java
StockTV17 分钟前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
User_芊芊君子20 分钟前
【OpenAI 把 AI 玩明白了】:自主推理 + 动态知识图谱,这 4 个技术突破要颠覆行业
java·人工智能·知识图谱
c++之路1 小时前
C++20概述
java·开发语言·c++20
Championship.23.241 小时前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮1 小时前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken1 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步2 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿2 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring