Spring 的核心特性之一是IoC,反转控制。这个概念太难理解,读完Spring reference手册关于IoC章节后依然只知道Spring 中IoC的是通过 Dependency Injection实现的。依赖注入很好理解,就是如果A对象需要引用B对象,那么在创建A对象实例时自动创建B对象,并把B对象的引用付给A。 但想来想去这和反转控制有什么联系啊。Spring reference中有一个解释Ioc的比喻:好莱坞规则——Don't call me,I will call you.
我默念了好多遍终于头脑里有点亮光。
可以这么理解IoC中的C-control, 如果A 调用 B的方法:A是调用这个动作的发起者、B为响应者 ,即为A控制B。在好莱坞规则里,把演员Call导演,变为了导演Call演员,其实都是完成同一件事报名演出,只是动作发起人变了。这即为反转控制。
其实在面向对象设计中不乏反转控制的例子,比如Observer观察者模式中。A对象在B对象出现某种变化时执行一个动作,这个动作发起者是A。Observer模式中通过注册、监听、回调等方式,把动作发起者变成了B,变成了由B调用A的方法。
那IoC有什么好处?
thinking...