Spring中的IOC与DI-细胞内物质与传递

news2025/1/18 4:31:07

对IOC的认识

Spring Inversion of Control简称Spring IOC,是一种设计原则,通过它可以实现对象之间的解耦。通过Spring DI(Dependency Injection)依赖注入实现对象生命周期管理,为开发者提供对象创建、使用方式。

Spring中的Bean

在Spring框架的日常开发中,会经常遇到编写一个Bean、注入一个Bean、使用一个Bean、销毁一个Bean的情况,那么到底什么是一个Bean?

把Bean理解成豆还是有些抽象,如果把一个个Bean看成一个个基本组成部分,是不是瞬间具体化了许多。

如果把Spring比做成一个植物细胞,不同的细胞结构聚合在一起组成了一个细胞,液泡、细胞核、线粒体相当于一个个Bean,负责不同的分工,如同Spring中的业务逻辑对象、数据访问对象、控制器、服务、工具类等。

即:

如果把Spring比作一个细胞,各个Bean则相当于细胞内的器官和分子的功能,各个Bean配合完成维持生命体征各个的功能。

Bean工厂

那么Bean工厂的作用是什么?

如果把Spring比作一个细胞,那么Bean工厂可以类比为细胞的细胞核,负责创建和管理细胞内各个分子及组件,调度它们的功能和行为。

Bean工厂的功能包括:

  1. 创建Bean实例:细胞核负责DNA的复制和转录,生成各种分子和组件。类似地,Bean工厂负责解析配置信息,根据定义的Bean元数据创建相应的Bean实例。
  2. 管理Bean的生命周期:细胞核控制细胞内分子和组件的生命周期,包括生成、活跃和销毁。Bean工厂也负责管理Bean的生命周期,通过初始化和销毁方法,确保Bean在适当的时候被创建和销毁。
  3. 解决依赖关系:细胞内的分子和组件之间存在复杂的依赖关系,细胞核负责解决这些依赖关系,确保分子和组件能够正确地协同工作。
  4. 管理Bean的作用域:细胞核具有控制细胞内分子和组件作用域的能力,例如调节基因的表达水平。Bean工厂也支持不同的Bean作用域,如单例、原型等,根据配置决定Bean的创建和销毁方式。

对DI的认识

Spring DI(Dependency Injection)即控制反转,它用于解决对象之间的依赖关系,将一个对象所依赖的其他对象注入到它的属性、方法参数或构造函数中。对象间的依赖关系由容器管理,实现对象间解耦。

Spring中的DI

如果将Spring比作一个细胞,那么依赖注入(Dependency Injection,DI)的作用类似于细胞内的物质传递和分配。

类比细胞分裂复制的过程,细胞核在分裂过程中需要从线粒体获取能量和物质,但线粒体与细胞核并没有直接的联系。这种能量和物质的传递是由细胞内部统一调配的,类似地,Spring扮演着细胞内的角色,接管两个Bean之间的功能,通过依赖注入将需要的物料传递给目标对象。

就像细胞内部的调配系统一样,Spring作为一个容器,通过配置文件、注解或其他方式描述对象之间的依赖关系,并将依赖的对象动态地注入到目标对象中。这样,目标对象就能够获取所需的能量和物质,而无需自己关心依赖对象的创建和管理。这种解耦和统一调配的特性使得应用程序的开发更加灵活和可扩展。

因此,可以将依赖注入比作细胞内物质传递和分配的过程,通过Spring的依赖注入,对象之间的依赖关系得以解耦,由Spring负责提供和传递所需的物料,从而实现更加灵活和可维护的应用程序开发。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu安装最新版neovim

Ubuntu安装最新版neovim 一、前言 对于neovim版本很重要,有很多插件几乎都要要求neovim版本在0.8或者0.9。但是有一个很严重的问题就是,Ubuntu使用sudo apt install neovim的版本很低达不到要求(写文章时是0.7) 二、解决方法 …

类的加载过程和反射以及注解

类的加载过程 三个阶段:加载-链接-初始化, 类的初始化只会执行1次。 加载 把字节码文件以流的形式加载到jvm中 链接 验证:验证字节码的合法性等以保证jvm的安全准备:为静态变量赋予初始值,为静态常量赋予有效值。…

【FusionInsight 问题】FusionInsight HD 6.5.1 集群中遇到的问题(01)

FusionInsight HD 6.5.1 集群中遇到的问题(01) FusionInsight HD 6.5.1 集群中遇到的问题(01)Spark-on-HBase认证问题Failed to find any Kerberos tgt服务端配置修改客户端配置修改 Spark-on-HBase依赖包问题phoenix-core-4.13.1…

2023年CRM系统排行榜

很多企业想要选择一款CRM系统来进行管理,提高效率。那么,2023年国内有哪些优秀的CRM系统呢?这里有一份2023最新国内crm系统排名,希望可以帮助到正在选型的您。 1、Zoho CRM Zoho CRM是一款知名的SaaS云端CRM系统,拥有…

使用 OpenTelemetry 构建可观测性 02 - 埋点

这是讲解 OpenTelemetry 系列博客的第二篇。在上一篇博客中,我们介绍了 OpenTelemetry 是什么以及由什么组成。现在我们将讨论如何使用 OTel 准确收集遥测数据和链路追踪数据。 手动埋点 我们这里谈论“埋点”(代码插桩),是指通过技术手段采集链路追踪…

网络协议详解之BGP

目录 BGP(边界网关路由协议) 一、基础知识囊括: 1.1 IGP协议追求: 1.2 EGP协议的追求: 二、BGP特点: 2.1 BGP数据包 2.2 BGP的工作过程 2.3 结构突变** 2.4 名词解析 2.5 BGP的路由黑洞问题 2.6 …

Plecs电力电子仿真专业教程-第一季 第四节 C语言脚本模块介绍

Plecs电力电子仿真专业教程-第一季 目录 第一章 Plecs是什么 第二节 Plecs 的功能介绍 第三节 Plecs界面介绍 补充课程 Plecs的安装教程与软件下载 第四节 Plecs C语言脚本模块介绍 鉴于很多学习的小伙伴私信我要安装软件,特此添加如下链接: Plecs4.6…

我记不住的Linux那些时间及区别

背景:总是搞不明白Linux系统中这些相关的时间及区别,通过查看网上的资料发现很多都是人云亦云,没有任何新意,所以这里根据自己的试验及资料,再次总结一下,在这里记录一下。 一、介绍 标准的POSIX文件有三…

spring如何进行依赖注入,通过set方法把Dao注入到serves

1、选择Generate右键鼠标 你在service层后面方法的这些: 2、UserService配置文件的写法是怎样的: 3、我们在UserController中执行一下具体写法: 最后我们执行一下 : 4、这里可能出现空指针,因为你当前web层,因为你new这个对象根…

计算机竞赛 医学大数据分析 - 心血管疾病分析

文章目录 1 前言1 课题背景2 数据处理3 数据可视化4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的心血管疾病分析 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! &#x1f9…

神经网络为什么可以学习

本资料转载于B站up主:大模型成长之路,仅用于学习和讨论,如有侵权请联系 动画解析神经网络为什么可以学习_哔哩哔哩_bilibilis 1、一个神经网络是由很多神经元形成的 1.1 也可以是一层,也可以是多层 2 层和层之间的连接就跟一张网一样 2.1 每…

AutoCompany模型的概念设计,涵盖了AI智能公司的各个角色

AutoCompany模型的概念设计,涵盖了AI智能公司的各个角色 自动化企业概念设计与设想,文本将介绍AutoCompany模型的概念设计,涵盖了AI智能公司的各个角色,并结合了GPT-4接口来实现各个角色的功能,设置中央控制器&#xf…

【Redis】Redis哨兵模式

【Redis】Redis哨兵模式 Redis主从模式当主服务器宕机后,需要手动把一台从服务器切换为主服务器,需要人工干预费事费力,为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控…

动力电池系统介绍(十三)——高压互锁(HVIL)

动力电池系统介绍(十三) 一、高压互锁梗概1.1 高压互锁原理1.1 高压互锁内部结构1.2 高压互锁分类1.3 高压互锁原则 二、高压互锁常见故障2.1 高压互锁开关失效2.2 端子退针导致开路2.3 互锁端子对地短路2.4 动力电池内部故障 三、高压互锁故障排查 一、…

孟德尔随机化:Steiger Test避免反向因果关系

Steiger Test避免反向因果关系 以下steiger test方法是一个新的方法学,增加后提升提取工具变量的稳健性,没有的话也不影响文章内容。 看自己的需要。跑分析过程中,如果是GWAS数据没有samplesize,自己又需要这个内容,…

musl libc ldso 动态加载研究笔记:01

前言 musl 是一个轻量级的标准C库,建立在系统调用之上,可以认为是【用户态】的C 库,与 glibc 或者 uClibc 属于同一类。 基于 musl 的 gcc 工具链包括交叉编译工具链,可以用于编译 Linux 或者其他的操作系统,如当前 L…

kubesphere 集成 sonar

文章目录 安装 helm通过 helm 安装 sonar配置 SonarQube 服务器创建 SonarQube 管理员令牌SonarQube 配置添加到 ks-installer创建 Webhook 服务器将 SonarQube 服务器添加至 Jenkins将 sonarqubeURL 添加到 KubeSphere 控制台重启服务 为新项目创建 SonarQube Token 官方文档&…

蓝蓝设计-ui设计公司-界面设计案例作品

泛亚高科-光伏电站控制系统界面设计 html前端 | 交互设计 | 视觉设计 | 图标设计 泛亚高科(北京)科技有限公司(以下简称“泛亚高科”),一个以实时监控、高精度数值计算为基础的科技公司, 自成立以来,组成了以博士、硕…

同样都是找工作,为什么你的简历没人看?

上次的文章分享了自己软件测试面试时的一些经历,今天我想分享一下自己当时写简历以及投简历方面的经历,本文内容纯粹是个人简单分享,如果有写得不好的地方还请读者包涵与指正。 我是去年的九月初开始投递简历的,貌似各行各业的人…