我对 Spring 有一个问题:我需要重复使用相同的 bean 实例两次,但不能使其成为单例。
这是一个简短的ApplicationContext:
<bean class="a.b.c.Provider" id="defaultProvider" scope="prototype">
<constructor-arg ref="lifecycle" />
<constructor-arg ref="propertySetter" />
</bean>
<bean name="lifecycle" class="a.b.c.Lifecycle" scope="prototype">
<constructor-arg ref="someParam" />
... and more args
</bean>
<bean id="propertySetter" class="a.b.c.PropertySetter" scope="prototype">
<constructor-arg ref="lifecycle" />
</bean>
所以,我需要在里面完全初始化Provider
,Lifecycle
并且PropertySetter
这PropertySetter
必须包含对相同的引用Lifecycle
,就像Provider
有一样。
当我将lifecycle
and定义propertySetter
为单例时,它会引起很大的问题,因为如果我创建多个Provider
,类的所有实例都Provider
共享相同的生命周期和属性设置器,这会破坏应用程序逻辑。
当我尝试将所有 bean 定义为原型时,生命周期 inProvider
和 inPropertySetter
又不相同 => 异常。
Provider
我有一个解决方案:仅传递给Lifecycle
并PropertySetter
在Provider
java 构造函数中创建(通过扩展Provider
)。它运行良好,但仅在我的本地环境中。在生产代码中我不能扩展 3ptyProvider
类,所以我不能使用这个解决方案。
请告诉我,在这种情况下最适合做什么?