注入构造函数属性

时间:2012-10-02 13:06:59

标签: java spring code-injection

我正在注入一个列表,该列表将填充该类中使用的地图。

但是当注入流动属性时:

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,抛出空指针异常。

如何通过注入列表填充地图

4 个答案:

答案 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所说的那样做,或者你也可以采取其他几种方法。

  1. 您可以调用此方法,而不是来自构造函数,而是来自您的setter方法setSrcSystemIDList(...)。这将需要最少的工作。 (但实际上,所有这些建议都很简单......)
  2. 您可以实现InitializingBean界面,并从那里调用您的方法。
  3. 您可以使用@PostConstruct注释该方法。
  4. 您可以在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了解详情。

干杯,