Java Spring单例实现

Java Spring单例实现,java,multithreading,spring,Java,Multithreading,Spring,我有一个singleton实用工具助手类,它有getInstance()方法,它惰性地初始化并返回实例。我总是使用getInstance()获取实例。我之所以使用Spring组件,只是因为我需要访问我的实用程序类中的一些其他Springbean 同时,默认情况下,该类是Springbean范围的单例 我应该只实现多线程应用程序,还是将其与双重检查锁定一起使用 或者SpringbeanSingleton将在应用程序的整个生命周期中保证这个单一实例 或者SpringbeanSingleton将在应用

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

同时,默认情况下,该类是Springbean范围的单例

我应该只实现多线程应用程序,还是将其与双重检查锁定一起使用

或者SpringbeanSingleton将在应用程序的整个生命周期中保证这个单一实例

或者SpringbeanSingleton将在应用程序的整个生命周期中保证这个单一实例

Spring在单个线程中加载它的bean,所以只要在Spring连接期间而不是以后访问Spring bean,就不必担心双重检查锁定。在其他工作中,如果您的helper类作为Spring
属性
传递给另一个bean,那么将在单线程上下文中调用
getInstance()


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

我建议您将Enum作为单线程使用,它将保证单实例和线程安全。看看这个问题和公认的答案,您应该避免双重检查锁定,因为它不能保证始终按预期执行。谢谢你,格雷!这个类是实用类,同时也是SpringSingletonbean。因此,只有在调用
getInstance()
时,我才应该保护它不受多线程初始化的影响,我是否正确地得到了它?使用
factory方法调用getInstance,它在spring加载时被调用。