什么是IoC

IoC的理论背景

面向对象编程(OOP)中,把复杂系统分解成一个个相互协同工作的对象,从而降低了解决问题的复杂度,而且对象可以灵活地被重用和扩展。但此时对象之间的依赖关系是无法避免的。依赖关系的多少,也就是耦合度的多少。
paste image
如何降低对象之间的耦合度,是软件工程永远追求的目标之一。

软件专家Michael Mattson在1996年提出了IoC理论,用来实现对象之间的“解耦”,目前这个理论已经被成功地应用到实践当中。

什么是IoC

控制反转(Inversion of Control,简称IoC),是面向对象编程中的一种设计原则。
控制反转就是把创建和管理对象的过程转移给IoC容器,容器负责创建、配置和管理对象。

paste image

如图,由于引进了IoC容器,使得A、B、C、D这4个对象没有了耦合关系,对象之间的依赖关系交给IoC容器来控制,降低了对象之间的耦合度。

IoC如何实现

IoC容器有两种实现方式:依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup),常用的是依赖注入(DI)。

依赖注入

容器会把所有对象放到容器,对于当前对象依赖的对象,容器会把依赖的对象自动注入到当前对象。

依赖查找

容器也会把所有对象放到容器,但是如果当前对象依赖其它对象,是通过容器提供的API获取到依赖的对象。因为此方式需要依赖容器的API,产生对容器的高度耦合,所以使用较少。

IoC技术原理

IoC中最基本的技术就是反射(Reflection)编程,目前.Net C#、Java和PHP5等语言均支持,其中PHP5的技术书籍中,有时候也被翻译成“映射”。反射通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象。这种编程方式可以让对象在生成时才决定到底是哪一种对象。

IoC容器的一些产品

Java技术体系下的IoC容器有:轻量级的Spring、Guice、Pico Container、Avalon、HiveMind;重量级的EJB;不轻不重的JBoss,Jdon等等;
Net技术体系下的IoC容器有:Spring.Net、Castle等等。Spring.Net是从Java的Spring移植过来的IOC容器,Castle的IOC容器就是Windsor部分。

坚持原创技术分享,您的支持将鼓励我继续创作!