1

クラス内で使用されるマップを設定するリストに挿入しています。

ただし、flowing 属性に注入する場合:

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

ただし、コンストラクターがメソッドを呼び出すと、リストは null になり、null ポインター例外がスローされます。

注入されたリストを介してマップを作成するにはどうすればよいですか

4

4 に答える 4

2

コンストラクターを介して注入する場合は、コンストラクターを次のように宣言する必要があります。

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

Vikdor の言うとおりにするか、他にもいくつかの方法があります。

  1. このメソッドは、コンストラクターからではなく、setter メソッドから呼び出すことができますsetSrcSystemIDList(...)。これにより、最小限の作業が必要になります。(しかし、実際には、これらの提案はすべて非常に簡単です...)
  2. インターフェイスを実装し、InitializingBeanそこからメソッドを呼び出すことができます。
  3. でメソッドに注釈を付けることができ@PostConstructます。
  4. init-method呼び出すメソッドを指定する属性をbeanxml に追加できます。
于 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 に答える