1

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

但是,在注入流动属性时:

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

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

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

4

4 回答 4

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>
于 2012-10-02T13:17:43.887 回答
2

你可以按照 Vikdor 说的做,或者你也可以采取其他一些方法。

  1. 您可以调用此方法,而不是从构造函数,而是从您的 setter 方法setSrcSystemIDList(...)。这将需要最少的工作。(但实际上,所有这些建议都很容易......)
  2. 您可以实现该InitializingBean接口,并从那里调用您的方法。
  3. 您可以使用 注释该方法@PostConstruct
  4. 您可以向 xml 添加一个init-method属性bean,该属性指定要调用的方法。
于 2012-10-02T13:20:24.150 回答
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>
于 2012-10-02T13:19:02.230 回答
0

你应该看看这样的东西

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

访问以获取更多信息。

干杯,

于 2012-10-02T13:19:30.793 回答