2010-06-09 55 views
3

在我的測試案例的設置,我有這樣的代碼:如何將StaticListableBeanFactory與ClassPathXmlApplicationContext連接?

ApplicationContext context = new ClassPathXmlApplicationContext(
      "spring/common.xml" 
    ); 
    StaticListableBeanFactory testBeanFactory = new StaticListableBeanFactory(); 

如何將二者連接以這樣一種方式,測試可以在安裝過程中註冊在testBeanFactory豆類和應用程序的其餘部分使用它們而不是在common.xml中定義的那些?

注:我需要混合靜態(common.xml)和動態配置。後者不能使用XML,因爲那意味着要寫入> 1000個XML文件。

回答

3

可以使用ConfigurableListableBeanFactory.registerSingleton()代替StaticListableBeanFactory.addBean()

ApplicationContext context = new ClassPathXmlApplicationContext(
      "spring/common.xml" 
    ); 

GenericApplicationContext child = new GenericApplicationContext(context); 

child.getBeanFactory().registerSingleton("foo", ...); 
0

你可能想嘗試另一種是有一個用的test.xml一個導入您的common.xml的bean定義:

<import resource="spring/common.xml"/> 

<bean id="AnIdThatOverridesSomethingInCommon"/> 

只能有一個特定的ID一個bean定義 - 在相同的文件它是一個XML驗證錯誤,在不同的文件中Spring將重寫定義。

編輯:只是注意到,這不適合你的情況 - 我會留在這裏爲了完整。

+0

沒有downvote,因爲編輯的:-) – 2010-06-09 12:00:13

+0

感謝 - 這是我用實際什麼,但我想你不會想,如果你想將其應用於現有測試的負載。 – cyborg 2010-06-09 13:08:18