2012-04-26 117 views
4

我有一個工廠化的ish bean,它在啓動時創建了許多對象,我希望這些對象本身就是Spring bean。Spring:使用工廠bean創建任意數量的bean

如果我正在創建一個單一的對象,我可以用工廠方法實例化,例如。 (從春天文檔節4.3.2.3):

<!-- the factory bean, which contains a method called createInstance() --> 
<bean id="serviceLocator" class="examples.DefaultServiceLocator"> 
    <!-- inject any dependencies required by this locator bean --> 
</bean> 

<!-- the bean to be created via the factory bean --> 
<bean id="clientService" 
     factory-bean="serviceLocator" 
     factory-method="createClientServiceInstance"/> 

如果我知道的時間提前,我就會有n個對象,我可以打電話給N個不同的方法,但我不 - 我廠創建任意提前未知的對象數量。

有誰知道如何做到這一點?

目標是讓他們成爲「合適的」像上面這樣的春豆會產生;具體來說,他們應該有資格自動裝配作爲來源和目標。請注意,這意味着我不只是想返回一個集合,而是讓它成爲bean。

我使用XML配置的Spring 3.1。

回答

1

好像你需要動態bean創建...

之前從來沒有嘗試過,但作爲this question提到的,你可以嘗試使用BeanDefinitionBuilder。似乎它有你需要的一切。在工廠bean中使用它(現在不需要將其定義爲工廠bean)。

編輯:我發現一個很好的使用示例here

喜歡的東西:

String className = ... // get class name from wherever you get it 

// Build your dynamic bean: 
BeanDefinitionBuilder bdb = BeanDefinitionBuilder.genericBeanDefinition(className); 
bdb.setSingleton(true); 
// add dependencies: 
bdb.addDependsOn(dependeeBeanName); 
// Eventually - validate it and get it: 
AbstractBeanDefinitionb bean = db.getBeanDefinition(); 

// I guess only now you get other already existing beans 
// and make them depend on the one you created in the same way 
+0

是很好知道這實際上幫助了OP或不... – Stewart 2017-03-03 17:17:21