重复使用原型bean的相同实例两次 – Spring

我有一个Spring的问题:我需要重复使用相同的bean实例两次,但不要使它成为单例。

这是一个简短的ApplicationContext:

      ... and more args     

因此,我需要在内部完全初始化带有LifecyclePropertySetter Provider ,并且此PropertySetter必须包含对Provider具有的相同Lifecycle引用。

当我将lifecyclepropertySetter定义为单例时,它会导致很大的问题,因为如果我创建多个Provider ,则所有Provider类实例共享相同的生命周期和属性setter,并且它会破坏应用程序逻辑。

当我尝试将所有bean定义为原型时, ProviderPropertySetter中的生命周期不再相同=> 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声明: