![](/img/trans.png)
[英]Java Spring + Jersey subresource: inject constructor-arg at runtime
[英]Java Spring IOC constructor-arg inject a List<Integer>
我正在尝试像这样开发Spring bean
<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));
整数可以是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
我已经根据Edwin更改了我的代码,如下所示。
<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)
我的目标是
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}}"/>
这对我有用
<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,避免直接使用Arrays.asList。
<bean id="list" class="java.util.ArrayList">
<constructor-arg type="java.util.Collection" value="#{{1,2,3,4,5}}"/>
</bean>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.