您的位置:首页 > 编程语言 > Java开发

Spring -- IOC理论

2015-07-15 17:35 519 查看

控制反转(IOC)

IOC(inversion of control)是spring的核心,就是由spring来控制对象的周期和对象间的关系。

传统开发模式:对象间相互依赖,比如A对象中引入B对象,要使用new B();

IOC开发模式:将对象之间的依赖关系交给IOC容器来做。

先看下图,我们来了解应该如何来完成一套好的架构



这张图是多个此轮之间相互协作,来完成一项任务。

图一,我们可以看出齿轮与齿轮之间相互依赖,彼此互相耦合,少了哪一个此轮,都会影响正常的工作,这个就类似与我们的传统开发模式

图二,通过IOC容器这个齿轮,带动4个此轮运转,4个此轮之间的依赖关系,完全由中间的大齿轮决定。

图三,去掉了大齿轮,我们可以注意到4个齿轮之间无任何的耦合性,这个状态对于我们软件开发来说,是一个非常理想的状态。

由于齿轮间没有耦合,彼此就完成自己的那部分工作就可以,在我们软件开发中这样是非常重要的,一个大的团队,团队中每个成员不用关心别的成员代码的开发进度,只要将自己的这部分代码完成即可,大大的提高了团队的开发效率。

依赖注入(DI)

其实它是控制反转的另一个名字,只是从不同的角度来进行了说明。

所谓的依赖注入,就是由IOC容器在运行期间,动态的将某种依赖关系注入到对象中,所以依赖注入(DI)和控制反转(IOC)是从不同角度来描述同一件事情,通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦

这里我们可以举一个例子,电脑和U盘之间的关系,电脑与U盘完全是两个单独的对象,他们之间是完全解耦的,当我把U盘插到电脑上的时候,电脑就从U盘读取数据,当我把另一块U盘插在电脑上的时候,它就从另一块电脑上读取数据,在这中间我就起到了一个IOC容器的作用,我来建立哪个电脑和哪个U盘之间的关系。

IOC的好处

看到这里,我想大家自己也能总结出来有哪些好处了。

降低了组件之间的耦合度(见上面图二)

提高了开发效率和产品质量(由于降低了耦合度,不用担心其他模块对你的而影响)

统一标准,提高模块的复用性(模块完全是独立的,谁想用就可以直接用)

模块具有热插拔效果(通IOC配置文件,可以决定对象之间的依赖关系)

总结

IOC理解:

IOC控制反转:创建对象实例的控制权由代码控制剥离到IOC容器控制,也就是xml文件控制,侧重于原理。

DI依赖注入:创建对象实例时,为这个对象注入属性值或其他对象实例,侧重于实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: