我有一種情況,我想通過工廠對象動態創建一個對象,但該對象需要通過spring上下文創建,以允許自動裝配依賴項。我知道還有很多其他的方法可以解決這個問題 - 例如使用服務定位器模式 - 但是如果可能的話,我想這樣做。使用實例工廠方法動態創建原型bean
想象我有兩個對象:
class OuterObject {
List<InnerObjectInterface> innerObjs;
...
}
class InnerObject implements InnerObjectInterface{
@Autowired
SomeDependency someDependency;
...
}
我想創建一個工廠,做的東西沿着線:
class OuterObjectFactory {
private innerObject = new InnerObject();
public OuterObject construct(params){
OuterObject o = new OuterObject();
List<InnerObjectInterface> inners = new ArrayList<InnerObjectInterface>();
...
for(some dynamic condition){
...
inners.add(createInnerObject());
...
}
}
public createInnerObject(){
return innerObject;
}
}
我春天的context.xml會看起來類似:
<bean id="outerObjectFactory" class="path.OuterObjectFactory" />
<bean id="innerObject" class="path.InnerObject" factory-bean="outerObjectFactory" factory-method="createInnerObject" />
但是,這是行不通的。只有一個innerObject是創建的,我希望它的行爲就像scope =「prototype」。如果我將scope =「prototype」添加到bean定義中:
<bean id="innerObject" class="path.InnerObject" factory-bean="outerObjectFactory" factory-method="createInnerObject" scope="prototype"/>
然後它似乎創建了許多innerObjects,但它們沒有正確接線。我的同事相信,找到here的文檔意味着工廠bean只用於初始化一個bean,但我不覺得那麼明顯。
如果有人能夠理解我的理解,並且可能甚至建議使用佈線建模工廠模式的更好方法,那麼我會很感激。
謝謝!
事實證明,這實際上並不適用於原型bean。然而,它確實讓我接受了方法注入,它解決了這個問題 - 不是很乾淨,但仍然很好。感謝麪糰 – idbentley 2011-04-14 18:29:56