2012-10-02 78 views
1

我正在注入一个列表,它将填充类中使用的地图。经由流动XML构造函数注入属性

private List<?> srcSystemIDList; 

<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(); 
} 

但是,当构造函数调用该方法列表为空时抛出空指针异常。

我怎么能填充通过注入列表地图

+0

您是否尝试用'@ Resource'注释'srcSystemIDList'? – Vikdor

回答

2

你可以做Vikdor说,或者你有你可以采取太一对夫妇的其他方法。

  1. 你可以调用这个方法,不是从构造函数,而是从你的setter方法setSrcSystemIDList(...)。这将需要最少的工作。 (但是真的,所有这些建议都非常简单...)
  2. 您可以实现InitializingBean接口,并从那里调用您的方法。
  3. 您可以用@PostConstruct注释该方法。
  4. 您可以将init-method属性添加到您的bean xml中,该属性指定要调用的方法。
+0

@PostConstruct 非常感谢 – Will

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

您可以通过属性设置器调用初始化:

public void setSrcSystemIDList(List<?> srcSystemIDList) { 
    this.srcSystemIDList = srcSystemIDList; 
    srcSystemIDListInit(); 
} 

并按原样使用您的弹簧配置。

或定义一个带参数的构造函数:

public TransformerHelper(List<?> srcSystemIDList) { 
    this.srcSystemIDList = srcSystemIDList; 
    srcSystemIDListInit(); 
} 

,春天配置转移列表作为构造函数的参数:

<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> 
0

你应该看看这样的事情

<bean id="transformerHelper" class="com.common.TransformerHelper"> 
    <constructor-arg><ref bean="yourListBean"></constructor-arg> 
</bean> 

访问Source了解更多信息。

干杯,