2011-12-13 58 views
0

財產我很新的春天和經歷通過各種渠道(圖書&互聯網)的DI話題,而我所看到的定義bean配置下列模式:進樣動態值在春

例如我們有一類 「SampleApp」

public class SampleApp 
{ 
    private int intValue; 
    private float floatValue; 

    public SampleApp(int value) 
    { 
     intValue = value; 
    } 

    public void setIntValue(int value) 
    { 
     intValue = value; 
    } 

    public void setFloatValue(float floatValue) 
    { 
     this.floatValue = floatValue; 
    } 
} 

相應的bean配置如下:

<bean class="somepackage.SampleApp" id="samplebeanapp"> 
    <constructor-arg value="15" /> 
    <property value="0.5" name="floatValue"></property> 
</bean> 

我們一直在硬編碼VALU在這裏15 & 0.5。 這裏是我的問題:

  • 是否有可能通過這些值作爲運行時間參數與範圍爲原型?
  • 如果是,我們該怎麼做?請用一些例子來詳細說明。
+0

你打算從哪裏傳遞值?如果你通過ClassPathXmlApplicationContext加載bean,你可以得到bean並設置好屬性。 –

回答

3

Spring配置文件在啓動時被處理,而Spring單例bean在那一刻也被實例化。在正常情況下,它們不會在應用程序生命週期中再次處理。

您可以使用這種類型的屬性注入來傳遞配置值,而您可以使用注入對象引用來確定應用程序的結構。

要避免對XML文件中的值進行硬編碼,可以使用PropertyPlaceholderConfigurer在屬性文件中提取它們。

原理是儘可能地編程接口,所以你不要將自己綁定到任何特定的實現。但是,對於您正在考慮的情況,您只需在運行時傳遞值。

示例:BeanA需要DaoBean的服務,但DaBeBe不會被BeanA實例化。它將通過依賴注入傳遞給BeanA,BeanA只會跟DaoInterface交談。

在這一點上,如果BeanA想要保存15和0.5,將用實際值(或更常見的變量)調用方法。

daoInterface.saveInt(15); 
daoInterface.saveFloat(0.5); 

在這種情況下,我不使用依賴注入傳遞值。依賴注入是一個很好的工具,但並不意味着它必須在任何地方使用。

+0

這是否意味着bean內的屬性值是該屬性的一種「默認」值?再一次,我們可以得出結論:定義單例作用域的屬性可能有一定的意義,但如果作用域是原型的話,那麼使用屬性值就無關緊要了。我在這裏再一次假設bean正在被其他bean引用,即bean作爲其他bean的屬性。 – Sumit