一分钟总结Spring的IOC和DI
admin
2024-04-18 06:05:40
0

IOC Inverse of control 控制反转 

IoC(控制反转)就是将程序中原来 new 对象,交给spring创建,从spring工厂获取对象,使用spring来负责控制对象的生命周期和对象间的关系.

Spring所倡导的开发方式——所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

IOC是什么 用的目的 什么是控制反转(举例:生活中、代码)

IOC是控制反转,主要用于:1、对象创建 2、依赖管理 目的就是为了解耦合,使代码具有更高的扩展性和维护性。

什么是控制反转?

控制反转是一种通过描述(XML或注解)并通过第三方生产或获取特定对象的方式。

在传统模式中,对象由程序员主动创建,控制权在程序员手中。如果用户需求变更,程序员就要修改对应的代码,,修改一次需求,或多或少会造成代码的修改,这个问题就是耦合性过高引起的。

IoC的主要思想是借助一个“第三方”来拆开原本耦合的对象,并将这些对象都与“第三方”建立联系,由第三方来创建、操作 这些对象,进而达到解耦的目的。

IoC的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,

生活中:1. 如共享单车 只拥有他的使用权,而不是所有权

2. 如你把买房子的需求交给房产中介 而不是自己搭建 控制权在房产中介手上(控制反转),而建房子的开放商是服务提供者,房产中介根据需求把房子提供给小明,就是依赖注入

3.如在相亲网站 也是提需求 相亲网站按照你的要求给你找对象

正转: 如拥有所有权 直接耦合 A类使用B类 A类创建B类对象

反转:A类使用B类的步骤:Spring管理B类对象 A类找Spring要B类对象,B类对象的所有权属于Spring A类只拥有使用权 对B类的控制权交给Spring

那么到底是“哪些方面的控制被反转了呢?”

获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。

实现IOC的方法:注入。

所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

DI Dependency Injection 依赖注入

“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”

  • 谁依赖于谁:当然是应用程序依赖于IoC容器;

  • 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

  • 谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

  • 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(依赖注入)来实现的。

比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢?Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

IOC和DI的关系


IOC和DI虽然定义不同,但他们所做的事情都是一样的,就是都是用来实现对象解耦的。

不同之处是IOC是一种设计思想,而DI是一种具体的实现技术
 

相关内容

热门资讯

盘点下24小时正规一元一分红中... 加群主V:mj43567 或 QQ:384169851 或欢迎麻将爱好者来玩,二千多真实玩家,一元一...
推荐玩法正规一元一分红中麻将群... 群主微:mj33931或QQ:384169851欢迎麻将爱好者来玩,一局一清,真人实战,全网最公平公...
必玩科普正规24小时一元一分红... 加群主微信:mj43567 或QQ:384169851来玩就送福利,群内所有用户都是微信实名制玩家,...
打发时间一元一分红中麻将跑得快... 认准微——as099055或as022055——客服扣675434346免押%D%A
哪里有一元一分血战到底麻将群_... 微【ss28210】【vy23547【z36121】四川血战换三张红中推倒胡等麻将群,加微拉群 随...
全网玩一分1块红中麻将跑得快让... 认准微——as099055或as022055——客服扣675434346免押金、免费进
放假不休息手机娱乐16张跑得快... 加群主威【yb68468或cc355389】【qq707940021】(一块一分四川川嘛血战)(一元...
一元一分四川麻将上分群四川麻将... 红中麻将一元一分APP方式:认准微—VY23547—z36L2L——客服扣398233877免押金、...