Использование метода фабрики экземпляров для динамического создания прототипов bean-компонентов

У меня есть ситуация, когда я хотел бы динамически создать объект через объект фабрики, но этот объект должен быть создан через контекст Spring, чтобы разрешить автоматическое связывание зависимостей. Я знаю, что есть много других способов решить эту проблему - например, используя шаблон локатора служб, - но я бы хотел сделать это, если возможно.

Представьте, что у меня есть два объекта:

class OuterObject {
    List innerObjs;
    ...
}
class InnerObject implements InnerObjectInterface{
    @Autowired
    SomeDependency someDependency;
    ...
}

I хотите создать фабрику, которая будет делать что-то вроде:

class OuterObjectFactory {
    private innerObject = new InnerObject();

    public OuterObject construct(params){
         OuterObject o = new OuterObject();
         List inners = new ArrayList();
         ...
         for(some dynamic condition){
             ...
             inners.add(createInnerObject());
             ...
         }
    }
    public createInnerObject(){
         return innerObject;
    }
}

Мой spring-context.xml будет выглядеть примерно так:



Это, однако, не работает. Когда-либо создается только один innerObject, и я хочу, чтобы он действовал так, как будто у него есть scope = "prototype". Если я добавлю scope = "prototype" к определению компонента:


Тогда кажется, что создается много внутренних объектов, но они неправильно связаны. Мой коллега считает, что документация, найденная здесь , подразумевает, что фабричный компонент используется только для инициализации компонента, но я не считаю это очевидным.

Я был бы признателен, если бы кто-нибудь мог очистить здесь я смогу понять и, возможно, даже предложить лучший способ моделирования заводского шаблона с проводкой, чем то, что я делаю.

Спасибо!

6
задан idbentley 13 April 2011 в 21:08
поделиться