2010-01-17 43 views
3

請考慮以下DialgBean.java類,它定義了網頁上對話框的屬性。下面是類及其bean定義基於Spring中語言環境變體的bean屬性動態注入

public class DialogBean{ 
    private int height; 

    public void setHeight(int height) 
    ... 
} 

<bean id="dialogBean" class="org.springhelp.DialogBean"> 
<property name="height" value="${dialogBean.height}"/> 
... 
</bean> 

從上面的例子可以看出,DialogBean的高度屬性正在被提供一個PropertyPlaceholderConfigurer牽強。

問題是我正在使用的應用程序支持多個客戶端,並且大多數客戶端對於對話框的高度參數都有單獨的需求。因此,我不能簡單地從一個屬性文件中提取高度參數。

那麼,如何使用上面描述的bean定義將客戶端特定的高度參數注入到DialogBean中,其中客戶端ID是作爲java.util.Locale對象中的變體存儲的?

有沒有辦法傳遞給一個自定義的bean工廠後處理器運行時數據,如Locale?

+1

它真的需要'最終'嗎?那不會編譯。 – BalusC 2010-01-17 04:08:21

+0

查看http://stackoverflow.com/questions/2037712/getting-spring-ioc-to-work-with-the-mvp-pattern/2037958#2037958 – axtavt 2010-01-17 15:18:08

+0

我習慣於把事情做好......顯然最終是不正確的 – 2010-01-17 16:39:17

回答

1

越簡單,但更麻煩的解決方案,是

  • 聲明每本地變種一個豆和從父(基)豆延伸。
  • 創建用於使得在查找用於基於區域設置豆接受的Locale
  • BeanFactory中瘦包裝,所述包裝從父(基)豆名稱和區域設置
  • 橫移過的列表中創建bean名稱的選項bean定義名稱並找到第一個與創建的名稱選項列表相匹配的名稱。

當然,選項列表必須按優先順序排列。

1

聽起來像你需要一個ResourceBundle或春季的說法,MessageSource。將其注入到bean中,並以編程方式解析您在運行時需要的值。

MessageSource可以包裝基本的ResourceBundle,並且使用起來更容易。

+0

感謝您提出的解決方案,理論上這將起作用。但是,要以彈簧緊密結合pojos爲代價。 此外,這種方法需要對DialogBean類中的每個bean屬性進行冗餘的程序化查找,這將增加對其他簡單對象的冗長性和維護性。 而且,類型轉換必須手動完成,因爲MessageSource只管理字符串 – 2010-01-17 21:30:53

+0

所有的都是如此,但是我沒有看到任何其他選項。 Spring bean有效地是靜態連接的,雖然有一些技巧可以使用請求範圍的bean來提取,但我不會在這種情況下工作。 – skaffman 2010-01-17 21:42:47

+0

我現在唯一可以考慮的折衷辦法是聲明一個默認的對話框bean,它將作爲所有客戶端特定bean的父對象;將bean的查找包裝在嘗試解析客戶端特定bean的自定義工廠後面。 失敗狀態是默認的父對話框bean定義 – 2010-01-17 22:27:52

相關問題