2012-03-27 2 views
4

Мне было интересно, можно ли указать вес x одного и того же компонента в списке весной. Например, вместо того, чтобы фасоль с идентификаторами: stage1, stage2, ... stageN, так как здесь:Несколько экземпляров Боба весной

<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 Spring. Однако вы можете реализовать свой собственный custom namespace, где вы можете поддерживать такой синтаксис.

В качестве альтернативы вы можете реализовать static method, который будет создавать экземпляр ArrayList с дублируемыми элементами.

+0

Спасибо за ответ - Я изучил статические методы и думаю, что это может быть путь. Но знаете ли вы, можно ли создавать уникальные элементы в экземпляре ArrayList, а не дублировать элементы? Спасибо – dchang

+0

Например, если мне нужны «n» новые экземпляры компонента StageClass? – dchang

+0

Все возможно, но это будет другой вопрос. Я могу вам поступить после того, как вы примете мой ответ. :) –

3

Если вы используете конфигурацию на основе аннотаций, и вы указали список объектов с таким же интерфейсом, как и зависимость для какого-либо класса, тогда весна автоматически будет автоматически прокручивать проводник автоматически. Пример:

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), но с разными параметрами конфигурации.

Смежные вопросы