通過 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; }
}