1.什么是ioc
IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。
1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。对于面向对象设计及编程的基本思想
,简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。
引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系
对象之间已经没有了耦合关系,彼此毫无联系,这样的话,当你在实现A的时候,根本无须再去考虑B、C和D了,对象之间的依赖关系已经降低到了最低程度。
3.IOC的优点
灵活性
为广泛使用的接口更改实现类更简单(例如,用生产实例替换模拟web服务)
更改给定类的检索策略更简单(例如,将服务从类路径移动到JNDI树)
添加拦截器很简单,只需在一个地方完成(例如,向基于JDBC的DAO添加缓存拦截器)
可读性
该项目有一个统一一致的组件模型,没有工厂(如DAO工厂)
如果没有依赖项查找代码(例如对JNDI InitialContext的调用),代码更简洁,也不会杂乱无章
可测试性
当依赖项通过构造函数或setter公开时,它们很容易替换mock
更容易的测试导致更多的测试
更多的测试会带来更好的代码质量、更低的耦合性和更高的内聚性
4.IOC的缺点
使用IOC框架产品能够给我们的开发过程带来很大的好处,但是也要充分认识引入IOC框架的缺点,做到心中有数,杜绝滥用框架。
第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本