У меня есть ситуация, когда я хотел бы динамически создать объект через объект фабрики, но объект должен быть создан через контекст пружины, чтобы разрешить автоматическое связывание зависимостей.Я знаю, что есть много других способов решения этой проблемы - например, с помощью шаблона поиска служб - но я бы хотел сделать это, если это возможно.
Представьте, что у меня есть два объекта:
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;
}
}
Мой spring-context.xml будет выглядеть примерно так:
<bean id="outerObjectFactory" class="path.OuterObjectFactory" />
<bean id="innerObject" class="path.InnerObject" factory-bean="outerObjectFactory" factory-method="createInnerObject" />
Это, однако, не работает.Создается только один innerObject, и я хочу, чтобы он действовал так, как если бы он имел scope = "prototype".Если я добавлю область = «прототип» к определению компонента:
<bean id="innerObject" class="path.InnerObject" factory-bean="outerObjectFactory" factory-method="createInnerObject" scope="prototype"/>
Затем создается впечатление, что создается много внутренних объектов, но они неправильно подключены.Мой коллега считает, что документация, найденная здесь , подразумевает, что фабричный компонент используется только для инициализации компонента, но я не нахожу это очевидным.
Я был бы признателен, если былюбой мог бы прояснить мое понимание здесь и, возможно, даже предложить лучший способ моделирования заводского образца с помощью проводки, чем то, что я делаю.
Спасибо!