Sping框架中用到的设计模式

Spring 框架是一个广泛使用的 Java 开发框架,它运用了多种设计模式来实现其强大的功能和灵活的架构,以下是 Spring 框架中常用的一些设计模式及其详解:

工厂模式

  • 简单工厂模式 :在 Spring 的 BeanFactory 中有所体现,它负责创建和管理 Bean 对象,就像一个工厂,根据配置或请求创建相应的 Bean 实例。比如,通过 BeanFactory 的 getBean 方法,根据指定的 Bean 名称获取对应的 Bean 对象,隐藏了对象创建的具体细节,使用者只需要关心获取到的 Bean 的功能。
  • 工厂方法模式 :ApplicationContext 是 BeanFactory 的子接口,它进一步扩展了工厂方法模式。在 Spring 中,可以通过实现 FactoryBean 接口来自定义 Bean 的创建逻辑,这允许更灵活地创建复杂的 Bean 对象,例如创建数据库连接池等复杂对象时,可以在 FactoryBean 的实现类中编写特定的创建逻辑。

单例模式

Spring 框架默认情况下,Bean 是单例模式的。在整个应用程序中,Spring 容器只会创建一个 Bean 实例,并在需要的时候返回这个实例。例如,在一个 Web 应用中,通常会将数据库操作的 DAO 层 Bean 配置为单例,这样所有需要访问数据库的地方都共享同一个 DAO 实例,避免了资源的重复创建和浪费,提高了系统的性能和资源利用率。

代理模式

  • 静态代理:在某些情况下,Spring 可能会使用静态代理来为 Bean 创建代理对象,以实现对目标 Bean 的功能增强或控制。例如,在不修改目标对象代码的情况下,通过静态代理可以在目标方法执行前后添加日志记录、事务处理等功能。
  • 动态代理:Spring AOP(面向切面编程)广泛使用了动态代理。当需要对某个 Bean 进行切面增强时,Spring 会在运行时动态创建代理对象,将切面逻辑织入到目标方法的执行过程中。例如,通过动态代理可以在方法执行前进行权限检查,执行后进行性能统计等操作,而不需要修改目标对象的源代码,实现了业务逻辑和横切关注点的分离。

策略模式

在 Spring 的事务管理中体现了策略模式。Spring 提供了多种事务管理策略,如基于编程式的事务管理和基于声明式的事务管理。开发者可以根据具体的业务需求选择不同的事务管理策略,而不需要修改核心业务逻辑。例如,对于一些简单的业务场景,可以选择基于编程式的事务管理,手动控制事务的开始、提交和回滚;对于一些复杂的业务场景,更适合使用基于声明式的事务管理,通过在方法上添加注解来声明事务的属性和行为。

模板方法模式

Spring 的 JdbcTemplate 就是模板方法模式的典型应用。JdbcTemplate 提供了一系列模板方法,用于执行各种数据库操作,如查询、更新等。它定义了操作的基本流程和框架,而将一些具体的操作步骤留给子类或回调函数来实现。例如,在进行数据库查询时,JdbcTemplate 的 query 方法定义了查询的整体流程,包括创建数据库连接、执行 SQL 语句、处理结果等,而具体的结果集处理逻辑可以通过回调函数来实现,这样既保证了数据库操作的一致性和规范性,又提供了灵活的扩展点,方便开发者根据具体的业务需求进行定制。

观察者模式

Spring 的事件驱动机制采用了观察者模式。在 Spring 中,当一个事件发生时,比如 Bean 的初始化完成、上下文刷新等事件,相关的监听器(观察者)会收到通知并执行相应的操作。例如,可以定义一个监听器来监听用户注册事件,当用户成功注册后,系统会发布一个用户注册事件,监听器收到事件后可以执行发送欢迎邮件、更新用户积分等操作,实现了系统中不同模块之间的解耦和异步通信。

装饰器模式

在 Spring 的资源加载机制中,Resource 接口及其实现类使用了装饰器模式。例如,BufferedResource 可以对其他 Resource 进行装饰,为其添加缓冲功能,提高资源读取的性能。通过装饰器模式,可以在不改变原始资源加载逻辑的基础上,动态地为资源加载过程添加新的功能,如缓存、加密等。

相关推荐
沫璃染墨2 小时前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式
十六宿舍4 小时前
【软件设计模式-第一课:基础知识了解】
设计模式·架构·面向对象·软件架构
geovindu7 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
怕浪猫10 小时前
面试官让我手写一个 Tool Use,我用了 3 种方案
设计模式·面试·程序员
geovindu1 天前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式
Carl_奕然1 天前
【智能体】Loop 的四种设计模式之:Event-Driven Loop(2026 最新版)
人工智能·驱动开发·python·设计模式
Carl_奕然1 天前
【智能体】Loop 的四种设计模式之:Hill Climbing Loop(2026 最新版)
人工智能·python·设计模式
晚安code2 天前
设计模式入门:吃透 SOLID 原则与迪米特法则,再学 5 个高频模式
后端·设计模式
染指11102 天前
135.Agent-多Agent框架-LangChain多智能体(SubAgents子代理)
数据库·人工智能·设计模式·langchain·agent·agents
路弥行至3 天前
【Head First 设计模式】第 2 章:观察者模式 —— 用现代 C++ 重新解读“交互对象的松耦合
c++·经验分享·笔记·观察者模式·设计模式·入门教程·headfirst