来源:
http://www.cnblogs.com/ggdesign/archive/2007/05/19/752117.html
近几年来,框架这个词出现的频率越来越高了。几乎见人就说框架了。随着新的轻型框架的出现,人们也越来越重视框架的应用了。
最近有一点的时间、有一点的冲动。想将一些学习的过程写出来。在这里要说明,我并不一定觉得Spring就是很好的IoC(当然,Spring不仅仅是IoC而是它的核心部分,其他方面以后再涉及),而是只从技术使用的角度出发来描述我自己学习的经历。
在java平台中,Spring现在被越来越多人采用了。而在.Net方面则应该算刚刚起步吧,希望它能够跟java一样受到大家的认同。
在.Net平台,比较有名的IoC应该是Castle了吧。什么是IoC呢?它的全称是Inversion of Control,中文意思为反转控制。比较简单的理解就是使具体的实现依赖接口,而不是接口依赖实现。不过听过这个短语形容不是很恰当,后来有提出用Dependency Injection来代替。意思是依赖注入,这个词确实更加的恰当和表现出了它的特征。对各个相关联的对象之间的关系通过一定的配置自动实现它们的依赖关系。这个东西有什么好处呢?每次学习一个新的东西时我想我们都应该这样问问自己。这里谈谈我自己的理解。比如说有几个有关联的对象,为了完成它们的初始化,使它们彼此能够很好的协作,我们可能要设置一些的属性并指向另几个对象。对与少数的这样对象,我们自己还是可以应付的过来的。但如果有很多的对象,它们都有一些“纠缠不清” 的关联、依赖关系。我们就要用很多的代码去完成它们的初始化,这个也不是什么大问题,因为始终是要做的。但是一旦你要修改一些对象的实现时,你可能就不得不去找到代码并修改对象的实现,如果有很多,你还是得这么做。这确实是一件很痛苦的事情。当中的硬编码还使得我们不得不重新编译一次代码。这种种的问题都使得人们去考虑其他更加好的解决办法。当支持反射的编程语言出来后,上面的问题慢慢开始得到解决。通过一个字符串的传入就能够使得编译器自动寻找想要实例的类,然后将它载入并实例。是的,反射就有这样的魔力,它可以得到一个类的所有方法的调用方式。这给人们脱离直接在代码中new一个实例提供了很好的方法。这样,你的具体实现可以完全从耦合中分离开来,在一个地方配置具体的实现方法然后返回给接口就行了,如果换了具体的实现也只需修改配置而不用重新编译代码了。It’s so cool!如果有用过在.Net配置文件中配置一个接口的具体的实现类你就能够感觉到它的方便之处。
另,由于IoC可以很好的管理存在的对象,我们不用费心的将一个对象传递给另一个对象,而只需在要用到对象的地方直接从IoC中取出来,之前修改过的状态会得到保存(可配置),从这个意义上讲它有些像保管站。
当然,IoC的用处还远不只这些。其他的应用有待我继续发现。