spring中IOC和DI

1. 面向对象中对象的关系?
 在面向对象中,对象的关系有:依赖、继承、聚合(分为聚集和组合)。我们重点讲什么叫依赖。举个例子:老师让课代表收作业。老师要完成这一个事情,必须得有课代表才行,在这边的关系就是老师依赖课代表。

2. IOC和DI的具体概念
 IOC(Inverse of control)控制反转:将自身对象需要的外部资源进行控制反转,反转后自身对象不再持有外部资源的创建控制,而是由第三方对外部资源进行创建控制,然后再注入自身对象需要的资源。
 概括上来讲,凡是自己用的资源(通常是对象)不是自己准备的(比如主动创建这个对象),自己做的事情还受别人影响的都称之为IOC。

 DI(Dependency Injection)依赖注入:自身对象需要的资源,这些需要的资源都是以注入的方式进行注入到自身对象当中。
 概括上来讲,自身对象所需要的属性或资源由别人设置。所以DI是IOC中的一种,而AOP就是不是DI的一种IOC。
3. 控制反转

问题解答
参与者有哪些?有三个,自身对象,IOC/DI容器和外部资源
谁控制谁?IOC/DI对象控制自身对象
控制的是什么?控制的是自身对象的实例创建

 我们通过画图来进行具体问题的分析:
传统和使用IOC思想解决问题的区别
 传统思想:
因为建房子需要打地基,所以为了完成这个任务,就将建房子和找施工队打地基这件事自己都做了。控制权都掌握在自己手中。在这当中,建房子就相当于自身对象,而打地基就相当于是外部资源。

 IOC思想:
配合上图中的进行分析,

步骤 
a自身对象为了完成建房子这件事,跟IOC/DI容器说需要地基
bIOC/DI容器寻找施工队,解决打地基的问题
c施工队打好地基,将地基交给IOC/DI容器
dIOC/DI容器把地基交需要地基才能建房子的自身对象

4. 何为反转?
 所谓的反转是相对于正向而言的。那么什么是正向呢?拿上面的例子来说,自身对象为了完成建房子这件事,自己找施工队(可以理解为new了一个施工队),然后施工队打了地基完成建房子,这种情况就称之为正向。现在我们利用IOC思想,建房子需要的地基交给IOC/DI容器来完成,自己不用去找施工队(放弃了new施工队的主动权),将IOC/DI容器去找施工队(相当于new 施工队),等待地基(相当于外部资源)注入到建房子当中。
 
5. 依赖注入

问题解答
参与者自身对象、IOC/DI容器、外部资源
谁依赖谁?自身对象依赖于IOC/DI容器
谁注入谁?IOC/DI容器注入自身对象
注入的是什么?注入的是自身对象所需要的外部资源

6. IOC和DI是同一个概念吗?
 依赖注入和控制反转在一般情况下来讲是一样的,他们是对一件事物的不同角度来说明这件事。依赖注入:偏向于应用程序的角度,自身对象依赖容器创建并注入所自身对象需要的外部资源。控制反转:偏向于容器的角度,由容器反向地向自身对象注入自身对象所需要的外部资源。

7. 对编程 思想上有何影响?
 本来一直以自身对象为中心,需要什么对象(外部资源)就自己new,掌握着主动权。但是IOC思想使得自身对象不再是中心,变成被动的,等待需要的外资源注入。有效地分离了自身对象和外部资源的松散耦合,提高了整个体系结构的灵活性。
8. 实际的应用体现
 通过引入IOC/DI容器,由容器进行管理对象的生命周期、对象依赖等关系,使得应用程序的配置和依赖规范性与实际的应用程序代码分开。通过文本的配置文件来完成应用程序之间的依赖配置,不用再去修改源代码。

 因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值