Spring(核心概念:IoC/DI思想)

news2024/11/15 23:42:09

目录

一、引言

(1)如今的代码书写现状

1、业务层

2、数据层

3、假如当项目上线发布之后,想把数据层的实现换一下

二、核心概念

(1)IoC( Inversion of Control ) 控制反转

(2)Spring 技术对 IoC 思想进行了实现。

(3)DI ( Dependency Injection ) 依赖注入

三、总结

(1)业务层实现、数据层实现最后的样子。

(2)核心概念的目标。

1、目标:充分解耦。

2、最终效果


一、引言

(1)如今的代码书写现状

1、业务层

由下图知:

这是一个业务层的实现类,实现业务层的接口。然后再创建一个数据层的接口(private BookDao ....)给出一个数据层的实现,再使用这个接口调对应的操作。

2、数据层

由下图知:

这是是数据层的实现类。

3、假如当项目上线发布之后,想把数据层的实现换一下

 

这时就出现了一个问题。(下面这个地方要替换)

变成下面这样

这时相当于你的源代码动了,就需要重新编译一下、重新测试、重新部署以及重新发布。造成这样的原因就是:我们在类里面写了一些其它的一些实现,导致我们的代码耦合度偏高

而我们写代码要求的是:低耦合度

解决:修改刚刚上面的代码。(不写实现,只剩下接口)

但是注意:

这样写程序运行肯定也会报错:没有实现对象。所以这样:使用对象时,在程序中不要主动使用 new 产生对象,转换为由外部提供对象。这种思想就叫做 "IoC"

二、核心概念

(1)IoC( Inversion of Control ) 控制反转

1、解释:对象的创建的控制权由程序转移到外部,这种思想称为控制反转。

2、也就是:使用对象时,由自己主动 new 产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部。

(就是对象的创建控制权发生变化。程序创建——>外部创建,为了一件事:" 解耦 "

(2)Spring 技术对 IoC 思想进行了实现。

1、Spring 提供了一个容器,称为 IoC 容器,用来充当 IoC 思想中的 " 外部 "。

(在系统架构图中有一个:Core Container(核心容器) 

2、所以在 Spring 框架技术当中,IoC 可以理解成由主动 new 产生对象,转换为由 IoC 容器提供对象。

3、IoC 容器要管理对象的创建和初始化过程。IoC 容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在 Ioc 容器中统称为 Bean

(3)DI ( Dependency Injection ) 依赖注入

1、解释:在容器中建立 bean bean 之间的依赖关系的整个过程,称为依赖注入。

(是两个有关系才会绑定依赖)

三、总结

(1)业务层实现、数据层实现最后的样子。

(2)核心概念的目标。

1、目标:充分解耦
  • 使用 IoC 容器管理 bean  ( "IoC" 的思想)
  • IoC 容器内将有依赖关系的 bean 进行关系绑定  ( "DI" 的思想)
2、最终效果

    使用对象时不仅可以直接从 IoC 容器中获取,并且获取到的 bean(对象) 已经绑定了所有的依赖关系。既能充分解耦,也可以保证程序的运行。

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

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

相关文章

XML 外部实体注入漏洞

XML(可扩展标记语言) XML 的定义 XML(eXtensible Markup Language,扩展标记语言)是一种用于描述结构化数据的标记语言,它类似于 HTML,但它的标签是自定义的。XML 的主要目的是传输和存储数据&…

刷题日记6.25

136. 只出现一次的数字 这道题考察的是异或算法,也是异或算法的一个典型作用例子。 注意题目要求实现线性时间复杂度算法解决,所以就不要想着排序或者用set数组之类的了。 先讲讲异或算法。 异或(XOR)是一种常用的位运算操作&am…

GIF转字符画

前言 上一次我们实现了静态图片转字符画: https://blog.csdn.net/weixin_54143563/article/details/139778645 由此我们不禁思考,对于动态的gif应该怎么转换呢? 思路 在网上我学习到了一种思路: 1.创建中间的临时文件夹tmp&a…

Web前端期末大作业--绿色自适应医疗健康医院网页设计(HTML+CSS+JavaScript+)实现

Toggle navigation Hospital 首页 关于我们医疗动态医疗资源联系我们 我们的服务 心脏监测 XXX的通道有许多变化,但大多数人以某种形式遭受了改变,通过注射幽默 康复治疗 XXX的通道有许多变化,但大多数人以某种形式遭受了改变,通…

Java技术栈总结:数据库MySQL篇

一、慢查询 1、常见情形 聚合查询 多表查询 表数据量过大查询 深度分页查询 2、定位慢查询 方案一、开源工具 调试工具:Arthas运维工具:Prometheus、Skywalking 方案二、MySQL自带慢日志 在MySQL配置文件 /etc/my.conf 中配置: # …

音频傅里叶变换(基于开源kissffs)

主要参考资料: 深入浅出的讲解傅里叶变换(真正的通俗易懂): https://zhuanlan.zhihu.com/p/19763358 推荐开源项目:KISS FFT: https://blog.csdn.net/gitblog_00031/article/details/138840117 数字硅麦数据的处理&…

【Android】实现图片和视频混合轮播(无限循环、视频自动播放)

目录 前言一、实现效果二、具体实现1. 导入依赖2. 布局3. Banner基础配置4. Banner无限循环机制5. 轮播适配器6. 视频播放处理7. 完整源码 总结 前言 我们日常的需求基本上都是图片的轮播,而在一些特殊需求,例如用于展览的的数据大屏,又想展…

使用 Swift 6 语言模式构建 Swift 包

文章目录 前言下载 Swift 6 工具链Swiftenv - macOSSwiftly - Linux在 SPM 中启用语言模式命令行包清单文件输出结论前言 我最近了解到,Swift 6 的一些重大变更(如完整的数据隔离和数据竞争安全检查)将成为 Swift 6 语言模式的一部分,该模式将在 Swift 6 编译器中作为可选…

【征服数据结构】:期末通关秘籍

【征服数据结构】:期末通关秘籍 💘 数据结构的基本概念😈 数据结构的基本概念😈 逻辑结构和存储结构的区别和联系😈 算法及其特性😈 简答题 💘 线性表(链表、单链表)&…

怎么查找企业的经营动态信息?

很多人都会查询企业的经营动态,比如很多投资者会关注企业的财务状况,市场战略,经营决策等信息;职场上也需要了解竞争对手和合作伙伴的相关经营动态,新品发布,技术专利申请等等。还有一些行业研究人员需要了…

STM32单片机WDG看门狗详解

文章目录 1. WDG简介 2. IWDG框图 3. IWDG键寄存器 4. IWDG超时时间 5. WWDG框图 6. WWDG工作特性 7. WWDG超时时间 8. IWDG和WWDG对比 9. 代码示例 1. WDG简介 WDG(Watchdog)看门狗 看门狗可以监控程序的运行状态,当程序因为设计…

钡铼技术BL101串口6路Modbus转MQTT网关加速智慧城市部署

随着物联网技术的飞速发展,如何高效地整合传统设备与现代云端系统,成为了亟待解决的关键问题。钡铼技术,作为物联网领域的硬件设备制造商,近期推出的BL101六路串口Modbus转MQTT网关,正以其独特优势,为智慧城…

LabVIEW在光学与光子学实验室中的应用

光学与光子学实验室致力于光学和光子学前沿领域的研究,涉及超快光学、非线性光学、光纤通信、光子晶体等多个方向。实验室需要高精度的实验控制和数据采集系统,以进行复杂的光学实验,并对实验数据进行实时处理和分析。 项目需求 实时控制与监…

CMDB详解及对企业的作用

CMDB即配置管理数据库(Configuration Management Database),是一种专门用于管理IT资产、配置信息和关系的数据库。CMDB以规划、监控、分析和存档企业的所有IT基础设施和应用程序为目的,成为企业IT管理和运营的重要工具。 CMDB的…

MySQL数据库(二):数据库基本操作

MySQL是一种流行的关系型数据库管理系统,广泛用于Web应用和各种数据存储需求。通过本次介绍,您将学习如何进行MySQL数据库的基本操作,包括创建数据库和表、插入和查询数据、更新和删除记录。这些基础知识将为您打下坚实的数据库操作基础。 目…

Hadoop04【集群环境搭建】

1 dfs.secondary.http.address hadoop-node01:50090 4.mapred-site.xml 首先需要将文件名称修改了。原文件名称为mapred-site.xml.template。指定MapReduce的资源调度方式为yarn。 mapreduce.framework.name yarn 5.yarn-site.xml 指定ResourceManager(yarn的老大)的地址和…

Maven编译打包时报“PKIX path building failed”异常

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 方法11.报错信息2.InstallCert.java3.生成证书文件 jssecacerts4.复制 jssecacerts 文件5. 然后重启Jenkins 或者maven即可 方法21.下载证书2. 导入证书执行keytool…

.NET使用原生方法实现文件压缩和解压

前言 在.NET中实现文件或文件目录压缩和解压可以通过多种方式来完成,包括使用原生方法(System.IO.Compression命名空间中的类)和第三方库(如:SharpZipLib、SharpCompress、K4os.Compression.LZ4等)。本文我…

排序算法(C语言版)

前言 排序作为生产环境中常见的需求之一,对整个产品有举足轻重的影响,可以说使用一个合适的排序算法是业务逻辑中比较重要的一部分。今天我们就来介绍常见的排序算法以及实现 排序 所谓排序无非就是按照特定的规则对一组数据就行顺序化。 常见的排序有…

柠檬班车载测试视频课程

这门课程将教授学员如何进行车载测试视频拍摄。学习者将学习如何选择合适的拍摄设备、构思拍摄场景、拍摄技巧和后期制作等内容。课程结合实例演练和个性化指导,帮助学员掌握车载测试视频拍摄的关键技能,提升视频制作能力。无论您是初学者还是有经验者&a…