スレッドセーフの問題が発生したため、シングルトンBeanをプロトタイプとして変換しています。しかし、1つのシナリオでは、複数のマップ項目に対して同じオブジェクト(スレッド内に)が必要です。しかし、プロトタイプは別のオブジェクトを与えています(もちろんそうです)。私はそれを達成する方法がわかりません。Java Bean - プロトタイプスコープで同じオブジェクトが必要
Bean Aの下では、B1とB2が2回参照されます(これはprototye beanです)。同じスレッドで毎回新しいB1およびB2オブジェクトが作成されています。私はそれを2回参照したにもかかわらず、同じスレッド内に1つのB1とB2オブジェクトしか必要としません。 B1とB2がシングルトンの場合は、スレッド間で同じであるはずはありません。あなたはそれを達成する方法についていくつか考えてください。
<bean id="A" class="mypackage.foo" scope="prototype">
<property name="myMap">
<bean class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="targetMapClass">
<value>java.util.HashMap</value>
</property>
<property name="sourceMap">
<map>
<entry key="KEY1">
<ref bean="B1"></ref>
</entry>
<entry key="KEY2">
<ref bean="B2"></ref>
</entry>
<entry key="KEY3">
<ref bean="B1"></ref>
</entry>
<entry key="KEY4">
<ref bean="B2"></ref>
</entry>
</map>
</property>
</bean>
</property>
優れた提案。私はシンプルスレッド用のカスタムBeanを追加し、それを使用しました。ありがとうalot –
ちょうどきれいにあなたのスレッドスコープをきれいにしてください。スレッドが再利用される場合は、「古い」データに実行される可能性があります。 –
アドバイスをいただき、ありがとうございました。私は二重チェックします。 –