2

キーに基づいてインスタンスを返すマップを春に構成しました。しかし、問題は、Bean がプロトタイプであっても毎回新しいインスタンスを作成するのではなく、常にマップ エントリ (プレート、スプーン、フォーク) の同じインスタンスを返すことです。私は何が欠けていますか?

私は春の非常に古いバージョンに取り組んでいることに注意してください。ここで私の設定:

<bean id="plate" class="com.xyz.items" singleton="false"/>
<bean id="spoon" class="com.xyz.items" singleton="false"/>
<bean id="fork" class="com.xyz.items" singleton="false"/>

<bean id="ItemFactory" class="com.xyz.items.ItemFactory" >
        <property name="registeredItems">
            <map>
                <entry key="spoon" value-ref="spoon"/>
                <entry key="plate" value-ref="plate"/>
                <entry key="fork" value-ref="fork"/>
            </map>
        </property>
    </bean>

//Here's the stuff in java

public class ItemFactory {

    private Map registeredItems;


    private Item getItem(String item ){

        Item item = (Item)registeredItems.get(item);

        return item;        
    }}

| |

4

1 に答える 1

2

参照された Bean がスコープされていても、人生は Bean の同じインスタンスへの参照を保持してItemFactoryいるだけだと思います。Spring は、プロトタイプ スコープの Bean の破棄を気にしません。シングルトンから参照されたときに Bean の新しいインスタンスを作成するだけです。 singletonprototype

より大きなスコープ ( ) を持つ Bean から、より小さなスコープ ( prototype) を持つ Bean を参照してsingletonいます。これは問題です。シングルトンからのプロトタイプ Bean の
参照を参照してください

この場合の解決策は 2 つあります。

  1. 上記のリンクで説明されているように、メソッド インジェクションを使用します。
  2. メソッドで、getItem()Spring アプリケーション コンテキストから直接 Bean を取得します。
于 2013-06-17T08:23:43.827 に答える