使用实例工厂方法动态创建原型bean

| 我有一种情况,我想通过工厂对象动态创建对象,但是需要通过spring上下文创建对象,以允许自动装配依赖项。我知道有很多其他方法可以解决此问题-例如使用服务定位器模式-但如果可能的话,我想以这种方式进行。 想象一下我有两个对象:
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 \”。如果我将scope = \“ prototype \”添加到bean定义中:
<bean id=\"innerObject\" class=\"path.InnerObject\" factory-bean=\"outerObjectFactory\" factory-method=\"createInnerObject\" scope=\"prototype\"/>
然后,它似乎创建了许多innerObjects,但未正确连接它们。我的同事认为,此处找到的文档暗示工厂Bean仅用于初始化Bean,但我发现这一点并不明显。 如果有人能在这里弄清我的理解,并且甚至可能提出比我在做的更好的方法,用布线对工厂模式进行建模,我将不胜感激。 谢谢!     
已邀请:
我认为您的意思是您有一个工厂,该工厂是一个单例,并且您希望它创建新对象,而每次使用完全依赖项注入时您都希望创建一个新对象。做到这一点的旧方法是您在上面链接的方法注入。新的(并且可能更干净的方法)是使用作用域代理。您可以使用批注或常规配置,但其想法是围绕Bean创建一个代理(例如InnerObject)。当您需要引用时,spring会自动为您提供一个新副本,其中插入了适当的依赖项。     

要回复问题请先登录注册