Spring IOC原理

来源:互联网 发布:7.0wow mac 插件 编辑:程序博客网 时间:2024/05/20 13:09

在学习Spring中,大家一直都会提到两个名词,一个是IOC ,一个是DI,lz在最开始接触时,对这两个名词也是很懵懂。什么是IOC ,什么是DI,二者为什么又是说指相同的事,Spring IOC的好处到底是什么,为什么Spirng这么备受大家欢迎。

首先我们来回答第一个问题:
1 什么是IoC?
IoC的全称 Inversion of Controller 即为控制反转,那什么又是控制反转。
说到此问题我们就要先说说“控制正转”。
我们举一个例子,我们要生产一辆车,而生产一辆车需要轮胎,发动机等,这里为了简化,我们只谈车和车轮的关系。
要生产一辆车,那我们就需要轮胎。这是我们可以说车是依赖车轮的。

public class Car{    //需要车轮    private Wheel wheel;    //生产车    public Car(){        this.wheel=new Wheel();    }}public class Wheel{    public Wheel(){        System.out.printlin("生产四个轮子");    }}

这是我们最直接的面向对象设计方式,但是这样设计有什么问题?
我们可以这样想象,到了未来科技进步,汽车不需要轮子了,而采用磁悬浮驱动,这样我们设计的car这个类,就不适用此种情况了,因为这个只能产生四个轮子的汽车,这就是我们所说的紧耦合,汽车太依赖于车轮。
为此,我们就要换一种思路,不让汽车去依赖车轮,把生产汽车配件的控制权从汽车拿走,交给第三方类似于“中介”。这样有什么好处呢,我们可以这样想,当我们创建Car时,这是我们需要轮胎了,但这时我们不用自己生产,我们直接去问中介方要车轮配件,我们不去管中介是怎么搞到这个车轮配件,只要给我就行。这时当我们把车轮换为磁悬浮的,我们只管问中介去要就行,而不需要去改我们汽车类的代码。我们把生产轮胎由汽车生产交给中介生产这种模式称为控制反转。
总结: 控制反转就是把控制权交给IoC容器,让IoC容器去负责创建实例,实现类的松耦合

2 什么时DI?
大家可能经常看到这样一句话,DI(依赖注入)就是IoC,本质是相同的,只是描述的角度不同。
那么,我们可以这样问,所谓控制反转,那么什么被反转了?
我们通过上面分析可以很容易的回答,是生产车轮的方式,由car生产车轮,变为第三方去生产。用专业术语来讲就是获得依赖对象的过程被反转了。
那么问题又来了,这个控制过程是怎么实现的?
依赖注入,通过IoC容器将原来所依赖的对象注入到所需要的对象中。

3 Spring IoC的好处是什么?
最大的好处就是实现解耦,对象和对象之间松耦合,这在我们后期维护变得很方便。

4 如何实现DI?
依赖注入主要有三种方式,构造器,set,接口注入。在下篇文章中将详细介绍。

原创粉丝点击