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