2014-09-25 26 views
1

我试图建立一个Spring bean这样的Java Spring IoC来构造带参数的注入名单<Integer>

<bean id="id" class="java.util.ArrayList" scope='prototype'> 
    <constructor-arg> 
     <list> 
      <bean class='MyClass'> 
       <property name='id' value='1313'/> 
       <property name="name" value='John Lennon'/> 
       <property name='wifes'>       
        <list> 
         <bean class="WifeClazz"> 
          <constructor-arg index='0' value='Cynthia Lennon'/> 
          <constructor-arg index='1'>          
           <list><value>1962</value><value>1968</value></list> 
          </constructor-arg> 
         </bean>     
        </list>     
       </property> 
      </bean>    
     </list> 
    </constructor-arg> 
</bean>   

这仅仅是一个例子了WifeClazz名字只是用于例如..有具有构造函数字符串和一系列整数.. like this example

new WifeClazz("Cinthia Lennon",java.util.Arrays.asList(1,2,3,4,5,6,7,8)); 

整数可以是severals从1到10的整数。

,但我认为这是一种讨厌做这样的事情

<constructor-arg index='1'>          
     <list> 
      <value>1</value> 
      <value>2</value> 
      <value>3</value> 
      <value>4</value> 
     </list> 
</constructor-arg> 

将是巨大的,如果我可以做这样的事情

<constructor-arg index='1'> 
     <value>#{T(java.util.Arrays).asList(1,2,3,4)}</value> 
    </constructor-arg> 

但抛出异常任何线索?

任何帮助非常感谢。

UPDATE

我有根据埃德温·一个像这样更改我的代码。

<constructor-arg index="1" type="java.util.Collection" value="#{T(java.util.Arrays).asList(1,2,3,4,5)}"/> 

但抛出

Caused by: java.lang.IllegalArgumentException: Final expected argument should be array type (the varargs parameter) 

我的目标是clazz中

public MyClass(final String name,final List<Integer>years){} 

我生成的代码

<bean id="id" class="java.util.ArrayList" scope='prototype'> 
<constructor-arg> 
    <list> 
     <bean class='MyClass'> 
      <property name='id' value='1313'/> 
      <property name="name" value='John Lennon'/> 
      <property name='wifes'>       
       <list> 
        <bean class="WifeClazz"> 
         <constructor-arg index='0' value='Cynthia Lennon'/> 
         <constructor-arg index="1" type="java.util.Collection" value="#{T(java.util.Arrays).asList(1,2,3,4,5)}"/> 
        </bean>     
       </list>     
      </property> 
     </bean>    
    </list> 
</constructor-arg> 
</bean>   

这解决了招...

<constructor-arg index='1' type="java.util.List" value="#{{1,2,3,4,5}}"/> 

回答

2

这对我的作品

<bean id="list" class="java.util.ArrayList"> 
<constructor-arg index="0" value="#{T(java.util.Arrays).asList(1,2,3,4,5)}"/> 
</bean> 

消除歧义构造,这也是对我的作品

<bean id="list" class="java.util.ArrayList"> 
    <constructor-arg type="java.util.Collection" value="#{T(java.util.Arrays).asList(1,2,3,4,5)}"/> 
</bean> 

你也可以使用一个集合SPEL,像这样的,并避免使用数组.asList直接。

<bean id="list" class="java.util.ArrayList"> 
    <constructor-arg type="java.util.Collection" value="#{{1,2,3,4,5}}"/> 
</bean> 
+0

我对第二个构造函数参数Edwin尝试了一下。 ''但不成功。我做错了什么 – chiperortiz 2014-09-25 21:05:31

+0

你能否让你的答案多一点。多解释一下。 – chiperortiz 2014-09-25 21:07:07

+0

所不同的是,我使用索引0,你正在使用索引1. – 2014-09-25 21:07:25