2012-03-27 71 views
4

我想知道是否可以在Spring中的列表中指定x数量的相同bean。例如,而不必与IDS豆:阶段1,阶段2,... stageN,如下:Spring中的多个Bean实例

<bean id="stage1" class="Stageclass"/> 
<bean id="stage2" class="Stageclass"/> 

<bean id="stages" class="java.util.ArrayList"> 
    <constructor-arg> 
     <list> 
      <ref bean="stage1" /> 
      <ref bean="stage2" />     
     </list> 
    </constructor-arg> 
</bean> 

有没有可能做一些像下面?:

<bean id="stage1" class="Stageclass"/> 

<bean id="stages" class="java.util.ArrayList"> 
    <constructor-arg> 
     <list> 
      <ref bean="stage1" duplicate="20 times"/> 
     </list> 
    </constructor-arg> 
</bean> 

谢谢提前。

回答

1

你不能用标准Spring的默认名称空间来做到这一点。但是你可以实现你自己的custom namespace,你可以支持这种语法。

或者,您可以实现一个static method,它将创建一个具有重复元素的ArrayList实例。

+0

感谢您的回应 - 我已经研究过静态方法,并认为这可能是要走的路。但是你知道是否可以在ArrayList实例中创建独特的元素,而不是复制这些元素? 谢谢 – dchang 2012-03-28 21:39:30

+0

例如,如果我想'n'StageClass bean的新实例? – dchang 2012-03-28 21:48:58

+0

任何事情都有可能,但那将是一个不同的问题。你接受我的回应后,我可以电视你。 :) – 2012-03-28 23:00:32

3

如果您使用基于注释的配置,并且指定具有与某些类的依赖性相同的接口的对象列表,那么spring将自动连线自动连线,然后免费。例如:

interface StageInterface { 
    //... 
} 

class StageImpl1 implements StageInterface { 
    //... 
} 

class StageImpl2 implements StageInterface { 
    //... 
} 

@Component 
class StageContainer { 

    private final List<StageInterface> stages; 

    @Autowired 
    public StageContainer(List<StageInterface> stages) { 
     this.stages = stages; 
    } 

    public List<StageInterface> getStages() { 
     return stages; 
    } 
} 

这是一个春季版本3+功能。

我相信xml配置也有可能。在你的情况下,这可能会是相同的类(StageClass),但具有不同的配置参数。