IOC:Inversion of Control(反转控制)
DI:Dependency Injection(依赖注入)
IOC一词来源于Martin Fowler发表的一篇文章,《Inversion of Control Containers and the Dependency Injection pattern》
那是什么被反转控制了?实际上指的是对象之间的依赖关系被反转控制了,原本由类自身维护所需对象实例的创建现在转由外部的IOC容器来维护。这种维护对象实例化的负责方被反转了。而依赖注入(DI)呢?意思更加明确,即获得所依赖对象的方式是由IOC容器从外部直接注入进来,而非我们通常的使用new的方式在类中来完成。
在JAVA中,大家熟知的Spring框架其核心内容便是反转控制及依赖注入。
使用IOC(DI)有什么好处?大致来说有两点:
1、类或模块之间的耦合度降低了,代码更易重用和维护
2、更加便于编写可测试的代码
随着面向对象的Actionscript3.0的推出,尤其是Flex在企业级应用中越来越多的应用,Flex(Flash)应用框架也越来越多,也有不少框架实现了IOC的功能,当然也包括一些独立的IOC容器框架。

在as3中实现IOC,核心是使用as3中的反射来完成的,相对来说,as3中的反射比起Java来说确实弱了不少,主要是利用describType返回的属性XML进行解析,而这样对性能会有一定的影响,若在as3中大量使用反射的话,一定要考虑到这一点. 另外,关于使用的配置文件,有以XML来进行的,有以MXML来实现的,也有两都均支持的,需注意的是以XML来实现的好外是我们可以直接更改外部XML而不需要重新编译相应源文件,而若使用MXML的话当你更改配置的话需要重新进行编译.
当然,目前以as3实现的IOC也有很多了,主要两在块:
Flicc
smartypants-ioc (名字取得不错,呵呵)
SwiftSuspenders (比较小巧)
Spring Actionscript(原名:Prana,此框架现已归入Springsource,几乎是Spring IOC实现的as3翻版,熟悉Spring的Java开发人员几乎不需要什么过渡就能理解)
Swiz(也属于比较成熟的框架了)
Robotlegs(MVCS框架,可集成使用其它任何DI容器,最初建立在smartypants-ioc,目前自身使用SwiftSuspenders)
Parsley(由PowerFlasher开发,个人比较喜欢这个框架,严格意义上来说它不算MVC框架,属于一套Toolkit,你完全可以使用自己的MVC方式来组织)
另外这里一份代码,一个Sample,以不同的IOC框架来实现,应该对大家学习比较有用:
http://code.google.com/p/flex-ioc-examples/
希望大家能找到适合自己项目使用的IOC容器^_^