2012-06-22 48 views
3

我有一個場景,我需要從數據庫或java對象加載屬性到bean中。從數據庫或Java對象動態加載spring bean屬性)

考慮例如:

<bean id="ConfigAsstDemoBeanParent" class="gps.springconfig.DemoClass" lazy-init="true"> 
    <property name="demoValueFromBean" value="demoValue"></property> 
    <property name="demoValueForKeyFromProperties" value="${DEMO_KEY}"></property> 
</bean> 

代替作爲${DEMO_KEY}財產佔位符,它從屬性文件中加載一個值,我需要從數據庫裝載,我檢索使用存儲過程的值一個Java類。

請建議我一個機制,我可以利用上述情況。目前我正在調查擴展SpringMain和/或PropertyPlaceholderConfigurer類並編寫我自己的自定義BootStrapper。

此外,請爲上述場景編寫BootStrapper提示。

+0

我使用PropertyPlaceholderConfigurer這樣的東西。 –

+0

@RockyTriton,但據我所知PropertyPlaceholderConfigurer只用於解析.properties文件的屬性。我真的不知道它如何用於從數據庫中獲取值。如果我錯了,請糾正我。 – kanap008

回答

5

一個地方Java配置似乎是一個偉大的選擇的情況下:

@Configuration 
public class Config { 

    @Resource 
    private DataSource dataSource; 

    @Bean 
    @Lazy 
    public DemoClass configAsstDemoBeanParent() { 
     DemoClass demo = new DemoClass(); 
     demo.setDemoValueFromBean("demoValue"); 
     demo.demoValueForKeyFromProperties(/* query the database here */); 
     return demo; 
    } 

} 

請注意,你可以注入DataSource(或JdbcTemplate)您@Configuration類,它提供它在其他地方定義。

+1

+1此外,您不必編寫任何自定義引導程序。您可以按照此處所述加載此類 - > http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/new-in-3.0.html#new-feature-java-配置 – sperumal

+0

這是真棒..完美的作品..雖然我一點點的東西。我有很多類似上面定義的bean,以及更多的屬性佔位符。您可以給我任何關於使其泛型的建議,我可以使用數據庫調用的Generic類獲取關鍵值的所有值。 .. – kanap008

+0

@ kanap008:如果您已經使用屬性佔位符在XML中定義了這些bean,則最好使用XML。您也可以嘗試自動生成'@ Configuration'類。 –