У меня есть ситуация, когда я хотел бы динамически создать объект через объект фабрики, но этот объект должен быть создан через контекст 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" к определению компонента:
Тогда кажется, что создается много внутренних объектов, но они неправильно связаны. Мой коллега считает, что документация, найденная здесь , подразумевает, что фабричный компонент используется только для инициализации компонента, но я не считаю это очевидным.
Я был бы признателен, если бы кто-нибудь мог очистить здесь я смогу понять и, возможно, даже предложить лучший способ моделирования заводского шаблона с проводкой, чем то, что я делаю.
Спасибо!