春天的哲学

时间:2009-10-22 23:57:09

标签: dependency-injection frameworks inversion-of-control

每当我问任何人Spring Framework是什么或它做什么时,他们只是对我说,你记得好莱坞原则正确的“别叫我,我会叫你”,这正是Spring Framework所做的。 / p>

我该怎么做?

4 个答案:

答案 0 :(得分:3)

这意味着类不会手动实例化它所依赖的组件 - 某些东西(例如Spring的IoC上下文)为类提供了所需的每个组件的实例。这通常通过每个组件的setter或者采用所有这些组件的构造函数来完成。

基本上不是自己进行手动实例化的类:

public class Foo {
  private Bar bar;
  public void doStuff() {
    bar = new BarImplementation();
    bar.doMoreStuff();
  }
}

IoC将依赖Bar注入Foo,这样当你从上下文中获取Foo对象时,你就知道它已经可以使用了。

public class Foo {
  private Bar bar;
  public void setBar(Bar bar) { this.bar = bar; }
  public void doStuff() {
    // bar's already been set by the time this is called!
    bar.doMoreStuff();
  }
}

您没有手动实例化Bar,而是您的配置文件(例如Spring XML)为您设置了它。此外,Foo不再与BarImplementation绑定。使用接口可以插入不同的实现,包括用于测试的模拟。

答案 1 :(得分:1)

有时回调模型更有效,特别是与解析

有关

如果你想象好莱坞的情况,那么一旦他们知道他们将要演员(甚至不打电话)而不必继续接听每个想要一个更新

答案 2 :(得分:0)

回调。 :P这对我来说意味着什么。回调是等待被调用的函数。

答案 3 :(得分:0)

请参阅http://en.wikipedia.org/wiki/Inversion_of_Control

Spring也做其他事情,但IoC /依赖注入似乎是最着名的功能。它可以帮助使系统更少耦合和更灵活。