2017-03-21 70 views
1

XML屬性注入是Spring中的一種依賴注入嗎?

<bean name="helloWorld" class="com.company.HelloWorld"> 
    <property name="msg" value="messaging"/> 
</bean> 

JAVA

package com.company; 

// ... 

public class HelloWorld { 
    private String msg; 
    public void setMsg(String msg) { this.msg = msg; } 
} 

如上所示,屬性 「msg」 中被注入到 「this.msg」 通過 「setMsg」 方法,該方法我理解爲 「屬性注入」。就我而言,Spring的DI被提升爲分離類,但上面的代碼只是注入屬性。我想知道春季是否以DI爲基礎進行房地產注入。希望有人能幫助我。

回答

0

注入意味着所需的依賴關係(在你的情況下:一個簡單的字符串)是從外部設置的(這可以手動完成或者在你的情況下通過DI容器 - 彈簧完成)。所以你的類不必知道「msg」的值被配置/檢索的位置,但它知道(創建時)它接收到正確的值。

回答你的問題:是的,屬性注入是一種依賴注入。另一種可能性(通常是首選)是構造函數注入,你的類必須在構造函數中聲明它的所有依賴關係。然後DI框架(春)對象的構造過程中注入的依賴......

0

就我而言,Spring的DI升任脫鉤類, 但上面的代碼只是注入性質。我不知道 屬性注入是基於DI在春季。

假設你HelloWorld類是依賴於一些所謂的LanguageHelper其它接口,那麼你就可以在運行時動態注入的LanguageHelper實施(Spring容器創建/管理這些類的對象,如果發現在類路徑中) ,只是通過指定如下所示的XML實現類的名稱(或者你可以使用註解):

<bean id = "helloWorld" class = "com.company.HelloWorld"> 
     <property name = "languageHelper" ref = "languageHelper"/> 
</bean> 

<bean id = "languageHelper" class = "com.company.LanguageHelperImpl"></bean> 
你的情況

但是,,它是要注入到你的bean動態簡單String值在運行時(而不是直接在課堂上進行硬編碼)。所以,這是一個注射,其中沒有額外的依賴關係進行評估,而只是使用提供的setter方法設置值。

因此,這是關於我們如何可以將類(可能是簡單的值或其他類實現)與未來的更改放在一起,而不是直接在其中進行硬編碼。