Spring单例实现

时间:2013-09-19 16:33:10

标签: java multithreading spring

我有一个具有getInstance()方法的单例实用程序助手类,它懒惰地初始化并返回实例。我总是使用getInstance()来获取实例。我只是将它作为Spring组件,因为我需要访问我的实用程序类中的一些其他spring bean。

同时,默认情况下,此类是spring bean范围的单例。

我应该只实现simple lazy initialization还是应该在多线程应用程序中使用双重检查锁定?

或者Spring bean singleton会在应用程序的整个生命周期中保证这个单个实例吗?

1 个答案:

答案 0 :(得分:0)

  

或者Spring bean singleton会在应用程序的整个生命周期中保证这个单个实例吗?

Spring将bean加载到一个线程中,因此只要在弹簧布线期间访问spring bean而不是以后访问,就不必担心双重检查锁定。在其他工作中,如果您的帮助器类作为Spring property传递给另一个bean,那么将在单线程上下文中调用getInstance()

但是,如果您将 factory 注入另一个类,并且之后有可能在之后调用{{1>}方法,那么接线完成你应该担心保护它免受多线程初始化的影响。