通過 XML 配置手動注入依賴項

考慮以下 Java 類:

class Foo {
  private Bar bar;

  public void foo() {
    bar.baz();
  }
}

可以看出,類 Foo 需要在另一個類 Bar 的例項上呼叫方法 baz,以使其方法 foo 能夠成功執行。據說 Bar 是對 Foo 的依賴,因為如果沒有 Bar 例項,Foo 就無法正常工作。

建構函式注入

當使用 Spring 框架的 XML 配置來定義 Spring 管理的 bean 時,可以按如下方式配置 Foo 型別的 bean:

<bean class="Foo">
  <constructor-arg>
    <bean class="Bar" />
  </constructor-arg>
</bean>

或者,(更詳細):

<bean id="bar" class="bar" />

<bean class="Foo">
  <constructor-arg ref="bar" />
</bean>

在這兩種情況下,Spring 框架首先將 Barinjects 的例項建立為 Foo 的例項。此示例假定類 Foo 具有可以將 Bar 例項作為引數的建構函式,即:

class Foo {
  private Bar bar;

  public Foo(Bar bar) { this.bar = bar; }
}

這種樣式稱為**建構函式注入,**因為依賴項(Bar 例項)是通過類建構函式注入的。

屬性注入

Bar 依賴注入 Foo 的另一個選擇是:

<bean class="Foo">
  <property name="bar">
    <bean class="Bar" />
  </property>
</bean>

或者,(更詳細):

<bean id="bar" class="bar" />

<bean class="Foo">
  <property name="bar" ref="bar" />
</bean>

這要求 Foo 類具有接受 Bar 例項的 setter 方法,例如:

class Foo {
  private Bar bar;

  public void setBar(Bar bar) { this.bar = bar; }
}