Spring中常见的设计模式

Spring框架是一个庞大的生态系统,设计模式的应用广泛分布在其各个模块中。以下是针对你提到的设计模式,在Spring源码中的具体应用位置:

  • 单例模式(Singleton Pattern)

    • org.springframework.beans.factory.support.DefaultListableBeanFactory类中,通过getBean方法获取Bean时,默认情况下会从缓存中返回同一个实例。
    • org.springframework.context.support.AbstractApplicationContext也使用了单例模式来管理应用程序上下文。

  • 工厂模式(Factory Pattern)

    • org.springframework.beans.factory.BeanFactory接口定义了Bean的创建规范,而DefaultListableBeanFactory是其默认实现之一。
    • org.springframework.beans.factory.support.AbstractBeanFactory提供了创建Bean的基本逻辑,并且可以被子类扩展以支持不同的Bean创建策略。

  • 代理模式(Proxy Pattern)

    • AOP相关的代理机制主要在org.springframework.aop.framework包下实现,例如JdkDynamicAopProxy用于JDK动态代理,CglibAopProxy用于CGLIB代理。
    • org.springframework.transaction.interceptor.TransactionProxyFactoryBean为事务管理提供代理支持。

  • 装饰器模式(Decorator Pattern)

    • org.springframework.security.config.method.InterceptMethodsBeanDefinitionDecorator类中,实现对 BeanDefinition 的装饰,添加安全检查逻辑,它扩展了 BeanDefinitionDecorator 接口,并实现了对方法级别的安全拦截,在不改变原有 BeanDefinition 结构的情况下,动态地添加了安全相关的元数据和行为。

  • 模板方法模式(Template Method Pattern)

    • org.springframework.jdbc.core.JdbcTemplateorg.springframework.web.client.RestTemplate等类都遵循了模板方法模式,它们定义了一组操作数据库或进行HTTP请求的基础步骤,允许用户通过继承或配置自定义某些特定行为。

  • 观察者模式(Observer Pattern)

    • org.springframework.context.ApplicationEventPublisher接口及其默认实现ApplicationEventMulticaster实现了事件发布与监听的功能。
    • org.springframework.context.event.EventListenerMethodProcessor负责处理带有@EventListener注解的方法,使其成为事件监听器。

  • 适配器模式(Adapter Pattern)

    • 在MVC框架中,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter将不同类型的控制器适配成统一接口供前端控制器调用。

  • 策略模式(Strategy Pattern)

    • 事务管理方面,org.springframework.transaction.PlatformTransactionManager定义了一个事务管理策略接口,不同的实现如DataSourceTransactionManagerJtaTransactionManager提供了不同的事务处理方式。

  • 责任链模式(Chain of Responsibility Pattern)

    • 基于org.springframework.web.servlet.HandlerInterceptor类的实现构成了一个拦截器链,用于在请求处理的不同阶段(如预处理、后处理、完成处理)插入额外的逻辑。
    • HandlerInterceptorAdapter 提供了默认实现,开发者可以通过继承该类来创建自定义拦截器。
    • HandlerExecutionChain 类管理这些拦截器的执行顺序,并确保每个拦截器都能按需处理请求。
    • SecurityFilterChain 是Spring Security中使用责任链模式的一个典型例子。它由一系列 Filter 组成,负责处理安全相关的任务,如认证、授权等。

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

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

相关文章

chrome-mojo C++ Bindings API

概述 Mojo C 绑定 API 利用C 系统 API提供一组更自然的原语,用于通过 Mojo 消息管道进行通信。结合从Mojom IDL 和绑定生成器生成的代码,用户可以轻松地跨任意进程内和进程间边界连接接口客户端和实现。 本文档通过示例代码片段提供了绑定 API 用法的详…

目标检测数据集合集(持续更新中)

第1期 高压输电线塔鸟巢数据集 第2期 特种工程车辆检测数据集 第3期 金桔目标检测数据集 第4期 金属锈蚀识别检测数据集 第5期 苦瓜目标检测数据集 第6期 石榴目标检测数据集YOLO格式 第7期 光伏电池板缺陷检测数据集YOLO格式 第8期 铁路轨道异物入侵检测数据集YOLO格式…

活动预告 | 为 AI 新纪元做好准备:助力安全的业务转型

课程介绍 随着现代办公模式的不断演变和 AI 技术的迅速发展,企业在享受效率提升的同时,也面临着信息安全与数据保护的严峻挑战。在利用 AI 技术释放业务潜力的同时,如何确保数据质量与安全已成为企业发展的关键议题。 在本次线上课程中&…

语义分割文献阅读——SETR:使用Transformer从序列到序列的角度重新思考语义分割

目录 摘要 Abstract 1 引言 2 Vision Transformer(ViT) 2.1 图片预处理:分块和降维 2.2 Patch Embedding 2.3 位置编码 2.4 Transformer Encoder的前向过程 3 SETR 3.1 图像序列化处理 3.2 Transformer 3.3 解码器 总结 摘要 本周阅读的论文题目是《R…

深度学习入门--python入门1

以前学的python全部还给老师了,所以现在重新开始学习了。目标是每天至少学习一点点吧。 目录 1.1 python是什么 1.2 python安装 1.3 python解释器 1.3.1 算术计算 1.3.2 数据类型 1.3.3 变量 1.3.4 列表(数组) 1.3.5 字典 1.3.6 布…

【2024最新Java面试宝典】—— SpringBoot面试题(44道含答案)_java spingboot 面试题

37. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot项目如何热部署?38. SpringBoot微服务中如何实现 session 共享 ?39. 您使用了哪些 starter maven 依赖项?40. Spring Boot 中的 starter 到底是什么 ?4…

【动态规划】风扫枯杨,满地堆黄叶 - 9. 完全背包问题

本篇博客给大家带来的是完全背包问题之动态规划解法技巧. 🐎文章专栏: 动态规划 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺…

python-leetcode-单词搜索

79. 单词搜索 - 力扣(LeetCode) class Solution:def exist(self, board: List[List[str]], word: str) -> bool:if not board or not board[0]:return Falserows, cols len(board), len(board[0])def backtrack(r, c, index):if index len(word):re…

游戏引擎学习第98天

仓库:https://gitee.com/mrxiao_com/2d_game_2 开始进行一点回顾 今天的目标是继续实现正常贴图的操作,尽管目前我们还没有足够的光照信息来使其完全有用。昨日完成了正常贴图相关的基础工作,接下来将集中精力实现正常贴图的基本操作,并准备…

PH热榜 | 2025-02-10

1. 2pr 标语:人工智能帮你把想法变成LinkedIn爆款 或者更口语化一点: AI帮你把点子变成LinkedIn上的热门帖子 介绍:用AI主持的访谈,把你的想法变成LinkedIn爆款帖子。录制你的想法,让AI帮你创作个性化、引人入胜的…

django配置跨域

1、第一种 from django.views.decorators.csrf import csrf_exemptcsrf_exempt第二种 安装 pip install django-cors-headers在配置文件settings.py进入 INSTALLED_APPS [..."corsheaders", # 添加 ]MIDDLEWARE [corsheaders.middleware.CorsMiddleware, # 添加…

使用C语言实现MySQL数据库的增删改查操作指南

使用C语言与MySQL数据库进行交互,通常涉及使用MySQL提供的C API库。这套API允许开发者在C/C++程序中执行SQL查询,从而实现数据库的增删改查操作。下面,我将详细介绍如何在C语言中实现这些基本操作。 准备工作 安装MySQL开发库:确保你的系统上安装了MySQL服务器以及MySQL开发…

25考研电子信息复试面试常见核心问题真题汇总,电子信息考研复试没有项目怎么办?电子信息考研复试到底该如何准备?

你是不是在为电子信息考研复试焦虑?害怕被老师问到刁钻问题、担心专业面答不上来?别慌!作为复试面试92分逆袭上岸的学姐,今天手把手教你拆解电子信息类复试通关密码!看完这篇,让你面试现场直接开大&#xf…

vite + axios 代理不起作用 404 无效

vite axios 代理不起作用 先看官方示例 export default defineConfig({server: {proxy: {// 字符串简写写法/foo: http://localhost:4567,// 选项写法/api: {target: http://jsonplaceholder.typicode.com,changeOrigin: true,rewrite: (path) > path.replace(/^\/api/, )…

【设计模式】【行为型模式】模板方法模式(Template Method)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 &#x1f…

基础设施在平台工程中的作用

平台工程侧重于设计和构建自助服务工具和环境,以简化软件开发和部署。通过简化和隐藏底层系统的复杂性,我们可以将精力集中在提供有意义的价值上。 从传统的 IT 运营过渡到集成的 DevOps 基础设施实践优先考虑团队合作、简化的流程和持续交付&#xff0…

Unity3D实现显示模型线框(shader)

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、第一种方式👉二、第二种方式👉壁纸分享👉总结👉前言 在 Unity 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…

活动预告 |【Part1】Microsoft Azure 在线技术公开课:AI 基础知识

课程介绍 参加“Azure 在线技术公开课:AI 基础知识”活动,了解 AI 核心概念。参加我们举办的本次免费培训活动,了解组织如何使用 AI 技术克服实际挑战,以及如何借助 Azure AI 服务构建智能应用程序。本次培训适用于任何对 AI 解决…

Hello Robot 推出Stretch 3移动操作机器人,赋能研究与商业应用

Hello Robot公司近日发布了其新一代开源移动操作机器人Stretch 3,这是一款高度灵活的机器人平台,专为机器人研究、教育实验和商业自动化设计。Stretch 3 结合了先进的移动机器人技术、灵巧操作能力和开源软件生态系统,为用户提供了一个功能强…

题解 洛谷 Luogu P1828 [USACO3.2] 香甜的黄油 Sweet Butter 最短路 堆优化Dijkstra Floyd C++

题目 传送门 P1828 [USACO3.2] 香甜的黄油 Sweet Butter - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P1828 思路 以每头奶牛所在的牧场为起点,求得到全图各个点的最短距离 再枚举全图所有点,计算从所有起点到某点的距离之和&a…