我确实理解Spring单例范围的bean(它们为每个Spring上下文都有一个实例)和Singleton模式(它们为类加载器有一个实例)之间的区别。
我注意到,对于许多人来说,单例模式被认为是邪恶的(因为它们就像全局引用),而似乎没有人反对单例范围的 bean(它们也是全局可用的)。这是为什么?
我有一个(桌面)应用程序,我需要对某些对象进行全局访问,因为传递对数十个类和方法的引用会非常麻烦。但是我不想使用 DI 框架,因为应用程序的启动时间很重要。最好的设计是什么?
最佳答案
public static
风格的单例不受欢迎,因为它们被硬连线到一个类中,而不是因为它们是全局的。例如,人们会告诉你他们不可能被模拟来进行测试。如果您只有少量全局对象,则不需要 Spring 只是为了避免这种简单的 Java 单例。然而,如果您有一个需要连接在一起的大量对象图,那么如果您使用 DI 方法,您的代码将会变得更加清晰。
Spring 中管理 bean 生命周期有很多便利,尤其方便的是您可以相当轻松地更改生命周期,例如从单例到原型(prototype)。这样的要求可能是由于延迟决定并发执行部分代码而出现的,并且代码依赖于非线程安全对象。
关于java - 为什么 Spring 单例范围的 bean 比经典的单例模式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339221/