Spring控制反转和依赖注入的理解(spring依赖注入和控制反转的区别)

Spring控制反转和依赖注入的理解1、IoC(控制反转)
首先想说说IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC&#x

1、IoC(控制反转)

首先,我想谈谈IoC(控制反转)。这是春天的核心,并贯穿始终。 Spring框架中所谓的IoC,是指Spring负责控制对象的生命周期以及对象之间的关系。举个简单的例子,一个常见的情况就是到处寻找漂亮、时尚的女孩,她们的兴趣爱好、QQ号、电话号、IP号、智商号等等,想办法找到办法。了解对方。为他们找到一个地方,这样你就可以给他们想要的东西。而且呵呵……这个过程复杂而深刻,所有的联系都要我们自己去设计和面对。这同样适用于传统的程序开发。如果您希望您的对象使用另一个对象,则需要检索它(通过自己创建一个新对象或从JNDI 查询它)并在使用后销毁该对象(例如,连接)。对象总是与其他接口或类组合在一起。

那么IoC是如何运作的呢?这类似于通过婚介所寻找女朋友。我和女朋友之间会介绍一个叫做婚姻介绍所的第三方。婚姻咨询机构管理着很多男女信息,你可以向婚姻咨询机构提交你想找的女朋友类型。比如她长得像李嘉欣,长得像林诗莉,唱歌也像。如果你像周杰伦一样快,像卡洛斯一样快,像琪琪一样熟练,那么婚介所就会按照我们的要求提供MM,我们只要爱上她就可以结婚了。简单来说,如果婚姻中介机构推荐的候选人不符合要求,就会抛出异常。整个过程不再由我来管理,而是由婚姻中介这样的机构来管理。这是Spring提倡的一种开发方式,你把你所有的类注册到Spring容器中,告诉Spring你是什么,让Spring在系统正常工作的时候主动提供你需要的东西。专注于其他需要你的事情。所有类的创建和销毁都由Spring 控制。这意味着对象的生命周期不再由引用它的对象控制,而是由Spring 控制。以前,某些物体控制其他物体,但现在所有物体都由弹簧控制,所以这称为控制反转。

2、DI(依赖注入)

IoC 的重点是在系统运行时动态地为对象提供它们所需的其他对象。这是通过DI(依赖注入)来实现的。例如,对象A 需要使用数据库。以前,您必须在A 中编写代码才能获取Connection 对象,但使用Spring 您只需告诉Spring A 需要Connection 即可。 A 不需要知道何时建立这个连接。在系统运行过程中,Spring在适当的时候创建Connection,并像注入一样注入到A中,完成对各个对象之间关系的控制。 A要成功运行,必须依赖一个Connection,这个Connection是由Spring注入到A中的。这就是依赖注入名称的由来。那么DI 是如何实现的呢?自Java 1.3 以来的一个关键特性就是反射。这允许程序在运行时动态创建对象、执行对象方法以及更改对象属性。

一旦您理解了IoC 和DI 的概念,一切就变得简单了,剩下要做的就是将块堆积到Spring 框架中。

3、对IoC(控制反转)和DI(依赖注入)的理解

在正常的Java应用程序开发中,如果要实现某个特定的功能或者完成某个特定的业务逻辑,在不使用Spring的情况下,至少需要两个或多个对象来协同工作。您必须使用new object() 等语法来创建联合对象。您负责创建联合对象。因为你控制了创建协作对象的主动权和时机,所以对象A必须使用协作对象B来共同完成一件事。如果,A 依赖于B。也就是说,A和B之间存在耦合关系,而且是紧耦合的。但使用Spring后就不一样了。创建联邦对象B的工作是由Spring完成的。 Spring创建一个B对象并将其存储在容器中。当A对象需要使用B对象时,Spring会从存储该对象的容器中检索A想要使用的B对象并将其传递给您。 A. 对象A不需要关心这个对象是如何使用的,Spring是如何创建的,什么时候创建的这些细节(它不关心它何时、如何诞生)只要你帮我搞定work),A从Spring获取给定的对象后,两者就可以共同完成工作。

换句话说,控制反转(IoC)意味着将创建对象的控制权转移给了创建对象的主动权和时机。第三方,例如With。 IoC容器是专门用于创建对象的工厂。在IoC容器中,依赖关系发生了变化,原来的依赖关系全部依赖于容器。它们之间的关系是通过IoC容器建立的。

参考

以上#理解Spring控制反转与依赖注入相关内容来源仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91839.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月23日 下午8:31
下一篇 2024年6月23日 下午8:50

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注