gpt4 book ai didi

java - 在 Spring 中配置 Map 返回原型(prototype) bean

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:32 24 4
gpt4 key购买 nike

我在 spring 中配置了一个映射,它根据键返回给我实例。但问题是它总是返回相同的映射条目实例(盘子、勺子、 fork ),而不是每次都创建一个新实例,即使 bean 是一个原型(prototype)。我错过了什么?

请注意,我正在开发一个非常旧的 Spring 版本。这是我的配置:

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

|

最佳答案

我认为,由于ItemFactorysingleton,它的所有生命周期都保留对同一个Bean实例的引用,无论引用的bean是否处于prototype范围内。 Spring 不关心原型(prototype)作用域 bean 的销毁,它只是在从单例引用 bean 时创建新的 bean 实例,仅此而已。

您正在从具有较大范围(singleton)的 bean 引用具有较小范围(prototype)的 bean,这是有问题的。
请参阅referencing prototype beans from singletons

这种情况有两种解决方案:

  1. 按照上面的链接所述使用方法注入(inject)。
  2. getItem() 方法中直接从 Spring 应用程序上下文检索 bean。

关于java - 在 Spring 中配置 Map 返回原型(prototype) bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com