Spring依賴注入(DI)

在Spring框架中,依賴注入(DI)的設計模式是用來定義對象彼此間的依賴。它主要有兩種類型:

  • Setter方法注入
  • 構造器注入

1. Setter方法注入

這是最流行最簡單的DI注入方法,通過設置方法注入依賴。

示例

幫助器類和指定的setter方法

package com.yiibai.output;

import com.yiibai.output.IOutputGenerator;

public class OutputHelper
{
IOutputGenerator outputGenerator;

public void setOutputGenerator(IOutputGenerator outputGenerator){
    this.outputGenerator = outputGenerator;
}

}

一個 bean 配置文件用來聲明bean 和通過 setter 設置注入(property標籤)的依賴。

<bean id="OutputHelper" class="com.yiibai.output.OutputHelper">
    <property name="outputGenerator">
        <ref bean="CsvOutputGenerator" />
    </property>
</bean>

只需注入一個「CsvOutputGenerator」 bean 到 「OutputHelper」對象,通過一個 setter 方法(setOutputGenerator)。

2.構造函數注入


此DI方法將通過構造函數注入依賴。

示例

一個輔助類的構造函數。

package com.yiibai.output;

import com.yiibai.output.IOutputGenerator;

public class OutputHelper
{
IOutputGenerator outputGenerator;

    OutputHelper(IOutputGenerator outputGenerator){
    this.outputGenerator = outputGenerator;
}

}

bean 配置文件來聲明bean並通過構造函數(constructor-arg標籤)設置注入依賴。

<bean id="OutputHelper" class="com.yiibai.output.OutputHelper">
    <constructor-arg>
        <bean class="com.yiibai.output.impl.CsvOutputGenerator" />
    </constructor-arg>
</bean>

只需通過一個構造函數注入一個 「CsvOutputGenerator」 Bean 到 「OutputHelper」 對象。

setter方法還是構造函數注入?


Spring框架的設置有沒有硬性規定,只需要使用適合你的項目需要的類型注入。然而,由於setter方法注入簡單,它總是大部分使用場景的選擇。

參考


1. http://en.wikipedia.org/wiki/Dependency_injection