很多人连它的出处都不知道,为什么能够信口开河?真是奇怪。包括Martin Fowler。早在1988,Ralph E. Johnson与BrianFoote在文章Designing Reusable Classes中有一段话,成为控制反转(Inversion of Control)的来由。
One important characteristic of a framework is that the methods defined by the user to tailor the framework will often be called from within the framework itself, rather than from the user's application code. The framework often plays the role of the main program in coordinating and sequencing application activity. This inversion of control gives frameworks the power to serve as extensible skeletons. The methods supplied by the user tailor the generic algorithms defined in the framework for a particular application.
★控制反转/Ioc,即框架控制一切,应用程序员提供支持代码。IoC反映了某些应用程序员的失落心情:从自由自在变为受控于人。IoC描述了一种现象:软件设计决定的控制权,由应用程序员转移到框架设计者手中。除此之外,IoC没有任何其他含义。 Martin Fowler嘲笑几位轻量级容器的作者,"我的轿车是与众不同的,因为它有四个轮子"。然而,提出DI的Martin Fowler,其实五十步笑一百步。
Spring DI容器仅仅是工具箱。它和框架、控制反转IoC,一点关系都没有。它完全是一个自行车,只有两个轮子。
Martin Fowler的文章《IoC容器和依赖注入模式》,前面刚刚说图形用户界面中程序的主控权发生了反转,接着又说“反转的是如何定位插件的具体实现”。IoC不是变形金刚,在不同场合就反转不同东西。我抽烟可以自己点火,如果别人帮我点火——它们反转的是什么——点火的人?社会地位的高低贵贱?脑洞不要太大。