通過 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 框架首先將 Bar 和 injects 的例項建立為 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; }
}