当前位置: 首页 > news >正文

spring中用到的设计模式

1. 单例模式(Singleton Pattern)

应用场景:Spring 默认的 Bean 作用域为单例,确保容器中每个 Bean 仅有一个实例,节省资源并提高性能。
实现方式:通过 BeanFactory 或 ApplicationContext 管理单例 Bean,使用 ConcurrentHashMap 存储单例实例。

2. 工厂模式(Factory Pattern)

简单工厂:BeanFactory 根据配置动态创建 Bean,例如通过 XML 或注解定义 Bean 的创建逻辑。
工厂方法:通过 @Bean 注解在配置类中定义工厂方法,例如自定义 FactoryBean 实现复杂对象的创建。
抽象工厂:ApplicationContext 作为高级工厂,扩展了 BeanFactory 的功能,支持国际化、事件发布等。

3. 代理模式(Proxy Pattern)

应用场景:Spring AOP 基于代理模式实现,通过 JDK 动态代理或 CGLIB 生成代理类,在目标方法前后添加日志、事务等横切逻辑。
核心实现:ProxyFactory 和 JdkDynamicAopProxy 负责生成代理对象。

4. 模板方法模式(Template Method Pattern)

应用场景:JdbcTemplate、RestTemplate 等封装通用操作流程(如数据库连接管理),将具体实现(如 SQL 执行)延迟到回调方法。
优势:减少重复代码,提升扩展性。

5. 观察者模式(Observer Pattern)

应用场景:Spring 事件机制(如 ApplicationEvent 和 ApplicationListener)实现解耦的事件发布与订阅,例如容器启动、Bean 初始化完成等事件的通知。

6. 适配器模式(Adapter Pattern)

应用场景:Spring MVC 中的 HandlerAdapter 将不同处理器(如 Controller)适配到统一的请求处理流程中。
示例:RequestMappingHandlerAdapter 处理基于注解的控制器方法。

7. 策略模式(Strategy Pattern)

应用场景:资源加载策略(如 Resource 接口的不同实现类)、事务管理策略等,允许运行时动态选择算法。
扩展性:通过 BeanPostProcessor 接口支持自定义策略扩展。

8. 装饰器模式(Decorator Pattern)

应用场景:包装对象以增强功能,例如 Spring 的事务管理包装数据源,或在 AOP 中动态添加行为。

9. 原型模式(Prototype Pattern)

应用场景:通过设置 Bean 的 scope=“prototype”,每次请求生成新实例,适用于需要状态隔离的场景。

10. 依赖注入模式(Dependency Injection)

核心机制:Spring 通过构造器注入、Setter 注入等方式解耦对象依赖关系,由容器管理 Bean 的生命周期。

其他设计模式

责任链模式:用于拦截器链(如 HandlerInterceptor)处理请求。
组合模式:CompositeCacheManager 组合多个缓存管理器。

http://www.dtcms.com/a/58264.html

相关文章:

  • 电商项目-秒杀系统(四)秒杀异步下单防止重复秒杀
  • 快速理清 Attention 注意力和 Encoder, Decoder 概念
  • .NET CAD 二次开发中的 Transform 与数学矩阵详解
  • 开源网站模板 html静态网页模板
  • 2021 年 6 月青少年软编等考 C 语言六级真题解析
  • mysql下载
  • 【算法day3】寻找两个正序数组的中位数
  • RK3588 安装ffmpeg6.1.2
  • 数据守护者:备份文件的重要性与自动化实践策略
  • CLIP模型使用方法
  • MapReduce技术概述**
  • java的jiraapi设置超时时间
  • Excel·VBA江西省预算一体化工资表一键处理
  • 【LeetCode 热题 100】11. 盛最多水的容器 | python 【中等】
  • Unity Shader编程】之基础纹理
  • Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL
  • MySQL:CRUD(增删查改)
  • 鸿蒙Next-应用检测、安装以及企业内部商店的实现
  • 日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(19):(1)家族の呼び方(よびかた):家族人物(2)助词练习
  • FreeRTOS任务状态查询
  • 数据库原理5
  • JavaScript系列06-深入理解 JavaScript 事件系统:从原生事件到 React 合成事件
  • Greenplum6.19集群搭建
  • 【云岚到家】-实战问题(上)
  • ubuntu 20.04 C++ 源码编译 cuda版本 opencv4.5.0
  • STM32驱动OLED屏幕全解析:从原理到温度显示实战(上) | 零基础入门STM32第五十三步
  • 人工智能与深度学习的应用案例解析及代码实现
  • Ae 效果详解:VR 色差
  • 计算机视觉cv2入门之图像的读取,显示,与保存
  • 【江协科技STM32】ADC数模转换器-学习笔记