2012-10-02 204 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瞭解更多信息。

乾杯,