为什么Spring单例范围的bean比经典的Singleton模式更好?

Wan*_*now 2 java singleton spring design-patterns dependency-injection

我确实理解Spring单例范围的bean(它们对每个Spring上下文都有一个实例)和Singleton模式(它们有一个类加载器的实例)之间的区别.

我注意到,对于许多人来说,Singleton模式被认为是邪恶的(因为它们就像全局引用),而没有人似乎有任何针对单例范围的bean(它们也是全局可用的).为什么是这样?

我有一个(桌面)应用程序,我需要全局访问某些对象,因为将引用传递给几十个类和方法会非常麻烦.但是我不想使用DI框架,因为应用程序的启动时间很重要.什么是最好的设计?

Mar*_*nik 6

public static风味的单身人士不喜欢因为他们被硬连接成一个班级,而不是因为他们是全球性的.例如,人们会告诉你他们不可能模仿测试.如果你只有少数全局对象,那么你不需要Spring来避免这种普通的Java单例.但是,如果您有一个需要连接在一起的实质对象图,那么如果您使用DI方法,您的代码将变得更加清晰.

Spring中有很多便利来管理bean生命周期,你可以非常方便地更改生命周期,例如从单例到原型.由于后期决定同时执行部分代码,并且代码依赖于非线程安全对象,可能会出现这样的要求.