我正在注入一个列表,该列表将填充该类中使用的地图。
但是当注入流动属性时:
private List<?> srcSystemIDList;
通过流动的XML:
<bean id="transformerHelper" class="com.common.TransformerHelper">
<property name="srcSystemIDList" value="#{ T(java.util.Arrays).asList('6','57','92','93','7','108','106','105','98','52','122','9','26','51','101','102','118') }" />
</bean>
此方法用于设置地图:
public void srcSystemIDListInit()
{
Object[] srcSystemArray = srcSystemIDList.toArray();
int j;
for(int i = 0; i< srcSystemArray.length; i = i+2)
{
j = i + 1;
if(j < srcSystemArray.length)
{
srcSystemIDMap.put(srcSystemArray[i].toString(), srcSystemArray[j].toString());
}
}
}
我是通过构造函数调用它的。
public TransformerHelper()
{
srcSystemIDListInit();
}
但是,当构造函数调用该方法时,list为null,抛出空指针异常。
如何通过注入列表填充地图
答案 0 :(得分:2)
如果要通过构造函数注入,则应将构造函数声明为
public TransformerHelper(List<?> srcSystemIDList)
{
this.srcSystemIDList = srcSystemIDList;
srcSystemIDListInit();
}
并且你的bean定义应该是
<bean id="transformerHelper" class="com.common.TransformerHelper">
<constructor-arg value="#{ T(java.util.Arrays).asList('6','57','92','93','7','108','106','105','98','52','122','9','26','51','101','102','118') }" />
</bean>
答案 1 :(得分:2)
你可以像Vikdor所说的那样做,或者你也可以采取其他几种方法。
setSrcSystemIDList(...)
。这将需要最少的工作。 (但实际上,所有这些建议都很简单......)InitializingBean
界面,并从那里调用您的方法。@PostConstruct
注释该方法。bean
xml中添加init-method
属性,指定要调用的方法。答案 2 :(得分:1)
您可以从属性设置器调用初始化:
public void setSrcSystemIDList(List<?> srcSystemIDList) {
this.srcSystemIDList = srcSystemIDList;
srcSystemIDListInit();
}
按原样使用弹簧配置。
或者使用参数定义构造函数:
public TransformerHelper(List<?> srcSystemIDList) {
this.srcSystemIDList = srcSystemIDList;
srcSystemIDListInit();
}
并在spring配置中将列表作为构造函数参数传输:
<bean id="transformerHelper" class="com.common.TransformerHelper">
<constructor-arg value="#{ T(java.util.Arrays).asList('6','57','92','93','7','108','106','105','98','52','122','9','26','51','101','102','118') }" />
</bean>
答案 3 :(得分:0)
你应该看看像这样的东西
<bean id="transformerHelper" class="com.common.TransformerHelper">
<constructor-arg><ref bean="yourListBean"></constructor-arg>
</bean>
访问Source了解详情。
干杯,