目录
什么是控制反转?
在引入IOC之前,A类如果想要使用B类的方法,自己去创建B类,然后调用B类的方法,无论是创建B类还是使用B类,控制权都在自己手里。
引入IOC之后,A类与B类失去了直接联系,A类如果想要使用B类的方法,IOC会主动去创建B类,然后将B类注入到A类,这样创建B类的“控制”权就由原来的A类“反转”到IOC容器了,A类获取B类的过程就由主动变为被动了。
这就是IOC控制反转的由来。
控制的是什么?
对象的创建
反转的是什么?
获取依赖对象的过程被反转。
IOC与DI的关系是什么?
IOC的别名是依赖注入:
依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
IOC最基本的技术是什么?
IOC最基本的技术是反射,通过反射创建出来的对象与正常创建出来的对象差1-2倍。
IOC的核心是什么?
我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
IOC的缺点是什么?
第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。
第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。
第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。
第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。
我们大体可以得出这样的结论:一些工作量不大的项目或者产品,不太适合使用IOC框架产品。另外,如果团队成员的知识能力欠缺,对于IOC框架产品缺乏深入的理解,也不要贸然引入。最后,特别强调运行效率的项目或者产品,也不太适合引入IOC框架产品,象WEB2.0网站就是这种情况。