在采用面向对象方法设计的系统中,都是通过底层的N个对象相互合作来实现系统的业务逻辑的。
底层的N个对象就像上图中的齿轮,通过齿轮间的相互啮合来实现合作,协同工作,共同完成某项任务。如果一个齿轮出现问题,那么就会对其他齿轮的正常工作带来影响,这就是所谓的牵一发而动全身。这种啮合关系跟对象与对象之间或者模块与模块之间的耦合关系很类似,如果其中一个对象或者模块出现问题,都会导致整个系统出现问题。为了降低对象之间的耦合度,于是就有专家提出了IoC理论,Spring就是一个应用了IoC理论的框架。
IoC(Inversion of Control)是控制反转的意思,传统的实现对象与对象之间的依赖关系,比如A对象想要调用B对象来实现某个业务逻辑,都是通过new一个B对象或者是使用一个已经存在的B对象,这样控制权在A对象自己手里,而应用了IoC理论的Spring框架则是将这种依赖关系交给第三方容器(IoC容器)来实现对象与对象之间的解耦,下图就是应用了IoC理论以后对象与对象之间的依赖关系效果图:
通过引入第三方容器(IoC容器)以后,A对象与B对象之间的直接依赖就变成了A和B共同依赖IoC容器,当A对象在需要用到B对象的时候,就由IoC容器来帮A对象创建一个B对象,而不是直接由A对象自己来创建,这样对象的控制权就交给了第三方(IoC容器)了,IoC容器就变成了整个系统的核心了,IoC容器就跟“粘合剂”一样,将整个系统中的所有对象“粘合”在一起,这也就是许多人把IoC容器称作“粘合剂”的原因。
那么为什么IoC容器又有个别名叫DI(Dependency Injection)依赖注入呢?实际上他们俩是从不同角度来看待同一个问题,就是指通过IoC容器,将依赖关系注入的方式,来实现对象之间的解耦。
使用IoC可以给我们带来如下好处:
1.可维护性好,便于进行单元测试,每一个class都可以单独测试,互不影响,这样组件之间就可以实现低耦合或者无耦合。
2.便于大型项目的团队分工,提高效率。
3.提高了模块的复用性。
4.使模块具有热插拔性。
参考资料:http://blog.csdn.net/m13666368773/article/details/7802126
欢迎关注行者摩罗微信公众号(xingzhemoluo),共同交流编程经验,扫描下方二维码即可;