0

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

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

我应该只实现简单的延迟初始化还是应该将它与多线程应用程序的双重检查锁定一起使用?

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

4

1 回答 1

0

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

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

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

于 2013-09-19T16:38:42.490 回答