重复使用原型bean的相同实例两次 – Spring
我有一个Spring的问题:我需要重复使用相同的bean实例两次,但不要使它成为单例。
这是一个简短的ApplicationContext:
... and more args
因此,我需要在内部完全初始化带有Lifecycle
和PropertySetter
Provider
,并且此PropertySetter
必须包含对Provider
具有的相同Lifecycle
引用。
当我将lifecycle
和propertySetter
定义为单例时,它会导致很大的问题,因为如果我创建多个Provider
,则所有Provider
类实例共享相同的生命周期和属性setter,并且它会破坏应用程序逻辑。
当我尝试将所有bean定义为原型时, Provider
和PropertySetter
中的生命周期不再相同=> exception。
我有一个解决方案:传递给Provider
only Lifecycle
并在Provider
java构造函数中创建PropertySetter
(通过扩展Provider
)。 它运作良好,但仅限于我当地的环境。 在生产代码中我无法扩展3pty Provider
类,因此我无法使用此解决方案。
请告诉我,在这种情况下最合适的做法是什么?
您无需扩展Provider
。 只需创建自己的ProviderFactory
,它将引用lifecycle
,然后创建PropertySetter
,然后创建Provider
:
public class ProviderFactory { public static create(Lifecycle lc) { return new Provider(lc, new PropertySetter(lc)); } }
这是Spring声明: