2014-09-25 29 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