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

目录

一、引言

(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.mzph.cn/bicheng/34528.shtml

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

相关文章

JSP 表达式语言

JSP 表达式语言 概述 JSP(JavaServer Pages)表达式语言(Expression Language,简称EL)是一种用于在JSP页面中简化数据访问的脚本语言。它允许开发者以简洁的方式在HTML代码中嵌入Java代码,从而实现动态内容的生成。EL提供了一种更加直观和易读的方式来访问JavaBean属性、…

6个应该学习的DuckDB SQL增强功能

大家好,DuckDB的SQL最初是基于PostgreSQL的,尽管这是一个不错的、可以模仿的SQL版本,但是随着时间的推移,DuckDB已经为其SQL功能引入了一些有用的补充,以使编程工作更加轻松。 对于那些没有听说过DuckDB的人来说&…

C 标准库 - <assert.h>

C 标准库 - <assert.h> 概述 <assert.h> 是 C 语言标准库中的一个头文件,它提供了一种用于调试程序的工具。assert 宏是 <assert.h> 中最核心的部分,它允许开发者在程序中设置断言(assertions)。断言是一种检查程序中某些假设是否为真的机制。如果断言…

《昇思 25 天学习打卡营第 4 天 | 数据集 Dataset 》

《昇思 25 天学习打卡营第 4 天 | 数据集 Dataset 》 活动地址&#xff1a;https://xihe.mindspore.cn/events/mindspore-training-camp 签名&#xff1a;Sam9029 数据集 数据是深度学习的基础&#xff0c;可以理解在 深度学习模型 中&#xff0c;数据就是模型训练的基础条件 M…

【杂记-浅谈FTP文件传输协议】

FTP文件传输协议 一、FTP协议概述二、FTP的安全隐患三、FTP服务器配置问题四、FTP的安全加固方法 一、FTP协议概述 FTP&#xff0c;File Transfer Protocol&#xff0c;即文件传输协议&#xff0c;是一种用于在网络上进行文件传输的标准协议&#xff0c;它允许用户在客户端和服…

【脚本工具库】图像位深转换-24-8(附源码)

图像位深简介&#xff1a; 在图像处理领域&#xff0c;图像位深的转换是一个非常重要的概念。不同的图像模式有着不同的用途和特点&#xff0c;下面我们详细介绍几种常见的图像模式及其转换方法。 首先&#xff0c;我们来看1位像素的二值图像&#xff08;1bit&#xff09;&…

HarmonyOS角落里的知识:“开发应用沉浸式效果”

概述 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条。开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感&#xff0c;从而使用户获得最佳的UI体验。 图1 界面元素示意图 开发应用沉浸式效果主要要考虑如下…

8.XSS盲打

XSS盲打 XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下&#xff0c;提交恶意JS代码在类似留言板等输入框后&#xff0c;所展现的后台位置的情况下&#xff0c;网站采用了攻击者插入的恶意代码&#xff0c;当后台管理员在操作时就会触发插入的恶意代码&…

BroadcastChannel 通讯原理

BroadcastChannel 是一种用于在同一来源&#xff08;同一协议、主机名和端口号&#xff09;下不同浏览器上下文&#xff08;如标签页、iframe、Worker、Service Worker&#xff09;之间进行消息广播的 API。它提供了一种简便、可靠的方法来实现跨上下文的实时通讯。 Broadcast…

24.面向对象编程特性

目录 一、面向对象语言特征1.1 对象包含数据和行为1.2 封装1.3 继承作为类型系统与代码共享 二、使用trait对象存储不同类型的值2.1 定义共有行为的trait2.2 实现trait2.3 trait对象执行动态派发2.4 trait对象必须保证对象安全 三、面向对象设计模式四、状态模式的权衡取舍五、…

python的 pyside2 安装

pip install pyside2 pip install pyqt5-tools pycharm 在pychar 的Main Menu--setings--tool--External-tools 点击 新增自定义工具 1&#xff09;自定义 QtDesigner 目的&#xff1a;用于生成.ui文件Name &#xff1a;QtDesigner Group &#xff1a;Qt Program &a…

交通 | 机器学习 + 大规模TSP/VRP求解

封面图来源&#xff1a;https://xkcd.com/399/ 推文作者&#xff1a;丁建辉&#xff0c;陈泰劼&#xff0c;张云天 本文针对旅行商问题&#xff08;Travelling salesman problem, TSP&#xff09;和车辆路径规划问题&#xff08;Vehicle routing problem, VRP&#xff09;这一类…

Python基础技能

目录 1. 掌握基础技能2. 变量与数据类型3. 条件语句4. 循环结构for循环while循环 5. 函数定义6. 列表与元组列表元组 1. 掌握基础技能 2. 变量与数据类型 在Python中&#xff0c;变量是用来存储数据的容器。我们可以给变量赋值&#xff0c;并使用这些值进行计算或操作。Pytho…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(附示例)

字符串分割&#xff0c;文末示例&#xff08;文末代码3附有源码&#xff09; 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

分布式系统_负载均衡

概述 大型网站都要面对庞大的用户量&#xff0c;高并发&#xff0c;海量数据等挑战。 为了提升系统整体的性能&#xff0c;可以采用垂直扩展和水平扩展两种方式。 垂直扩展&#xff1a;从单机角度扩展&#xff0c;增加单机硬件&#xff08;CPU、内存、磁盘&#xff09;处理能…

Vue进阶之Vue无代码可视化项目(五)

Vue无代码可视化项目 编排引擎smooth-dndLeftPanel.vueLayoutView.vuestores/debug.tsstores/editor.tsAppNavigator.vue添加-左侧栏添加到中间部分LayoutView.vuestore/editor.tsLeftPanel.vue移动-中间部分区域的位置更改新建文件夹utils、文件array.tsarray.tsLayoutView.vu…

基于rouyi框架的多租户改造

基于rouyi框架的多租户改造&#xff0c;重点是实现权限管理和数据隔离。权限管理相当于从原来的“顶级管理员admin-普通用户user”转变为“顶级管理员admin-租户管理员tanantAdmin-普通用户user”。数据隔离主要通过分库、分表、表内设置tenantId字段进行过滤三种方式。 本文主…

[word] word 如何在文档中进行分栏排版? #媒体#其他#媒体

word 如何在文档中进行分栏排版&#xff1f; 目标效果 将唐代诗人李白的组诗作品《清平调词》进行分栏排版&#xff0c;共分三栏&#xff0c;每一首诗作为一栏&#xff0c;参考效果如下图。

计算机图形学入门16:阴影映射

1.前言 前面几篇关于光栅化的文章中介绍了如何计算物体表面的光照&#xff0c;但是着色并不会进行阴影的计算&#xff0c;阴影需要单独进行处理&#xff0c;目前最常用的阴影计算技术之一就是Shadow Mapping技术&#xff0c;也就是俗称的阴影映射技术。 2.阴影映射 Shadow Map…

CSS中实现元素水平垂直居中的方式有哪些

在CSS中实现元素水平垂直居中的方法有很多&#xff0c;以下是一些常见的方法&#xff1a; 1. 使用Flexbox Flexbox是一个现代的布局模型&#xff0c;可以轻松实现元素的水平垂直居中。 .container {display: flex;justify-content: center; /* 水平居中 */align-items: cent…