Spring 核心概念 IOC/DI IOC容器 Bean

Bertha 。 2024-03-30 13:30 147阅读 0赞

目录

一:代码书写现状

二:核心思想


一:代码书写现状

da2cc85f23ce4ccd86a9b33eb5a628e0.png

常规操作如上,但存在着问题,将项目上线后,需要将数据层进行更换,更换如下:

c1cbcddb4b614be893990f33ca437eb7.png

数据层更换后,业务层也需要进行更换,更换如下:

2f547e0ae4264d8f87eb8e3519a61bf5.png

数据层和业务层的代码都进行了更换,那么源码也需要重新编译,重新测试,重新部署,重新发布,这些工作重新进行,那么成本也是会增加的,这些原因终究只有一条:由于我们在类里面进行了其他方法的实现,导致代码的耦合度提高。我们代码编写的原则就有一条,要追求低耦合。所以,在这里存在着一个问题,这里的耦合度过高,我们要想办法把这里的耦合度减小,既然是在业务层中编写代码将耦合度提高的,那么我们不如在这里不写,来将耦合度减小,实现代码如下:

1b978c8d3a21450cb4abba613644c020.png

如上所示,耦合度是减小了,但是存在着问题:只存在着接口,一运行的话,那么就会报异常,NullPointerException异常,没有实现对象,那么我们要让程序运行怎么办,这里不就是没有实现对象而导致异常,你不就是要一个对象吗?你不要写对象了,我直接给你一个对象不就能让程序运行了嘛,这就是使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象思想,这样的问题解决方案思想被称为IOC( Inversion of Control):控制反转, 对象的创建控制权由程序转移到外部,这种思想称为控制反转

0a40287b821d46b7ac7e2ee0b52dbae9.png

二:核心思想

lOC思想

Inversion of Control, 控制反转, 强调的是原来在 程序中创建Bean的权利反转给第三方。

使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转

  • 问: 这种思想与Spring有什么关系呢?
  • 答:Spring技术对 lOC思想进行了实现

Spring将这种思想给完成实现了,怎么做到的呢?其实也就是Spring提供了一个容器,称为IOC容器,用来充当IOC思想的”外部”。

原来代码写法:

2f547e0ae4264d8f87eb8e3519a61bf5.png

现在代码写法:

215feaf05786464b8eac88bb851020f2.png

IOC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean

如图所示,IOC容器帮我们将service和dao层创建好了后,代码能成功运行起来吗?答案是不行,因为service的运行是依赖于dao的

0fdb2e45af284e7797ad5f234620237a.png

既然serviec是依赖于dao来运行的,巧了的是service与dao都是在IOC容器中的,那么IOC容器就帮你将service和dao之间的依赖关系给绑定好,也就是这个dao对象,IOC容器直接给你,让你的程序能直接运行,这种思想称为DI思想:

Dependency Injection, 依赖注入, 强调的Bean之 间关系,这种关系第三方负责去设置。

在容器中建立Bean与Bean之间的依赖关系的整个过程,称为依赖注入

介绍完 Spring 的 IOC 和 DI 的概念后,我们会发现这两个概念的最终目标就是 :充分解耦,具体实现依靠 :

  • 使用IOC容器管理bean(IOC)
  • 在IOC容器内将有依赖关系的bean进行关系绑定(DI)

最终效果:

  • 使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

发表评论

表情:
评论列表 (有 0 条评论,147人围观)

还没有评论,来说两句吧...

相关阅读