【问题标题】:Spring singleton implementationSpring单例实现
【发布时间】:2013-09-19 16:33:09
【问题描述】:

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

同时这个类默认是spring bean scoped singleton。

我应该只实现simple lazy initialization 还是应该将它与多线程应用程序的双重检查锁定一起使用?

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

【问题讨论】:

标签: java multithreading spring


【解决方案1】:

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

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

但是,如果您将 factory 注入到另一个类中,并且有可能在接线完成后 调用 getInstance() 方法,那么您应该担心保护它免受多线程初始化。

【讨论】:

  • 谢谢格雷!这个类是实用程序类,同时它是spring singleton bean。因此,只有当我调用getInstance() 时,我才应该保护它免受多线程初始化,我猜对了吗?
  • 使用factory-method调用getInstance,它会在spring加载时被调用。
猜你喜欢
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2014-06-11
  • 2013-07-16
  • 1970-01-01
  • 2012-07-17
  • 2015-08-28
  • 1970-01-01
相关资源
最近更新 更多