2012-03-27 77 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),但具有不同的配置參數。