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

标签 java spring design-patterns dependency-injection singleton

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

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

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

最佳答案

public static风格的单例不受欢迎,因为它们被硬连线到一个类中,而不是因为它们是全局的。例如,人们会告诉你他们不可能被模拟来进行测试。如果您只有少量全局对象,则不需要 Spring 只是为了避免这种简单的 Java 单例。然而,如果您有一个需要连接在一起的大量对象图,那么如果您使用 DI 方法,您的代码将会变得更加清晰。

Spring 中管理 bean 生命周期有很多便利,尤其方便的是您可以相当轻松地更改生命周期,例如从单例到原型(prototype)。这样的要求可能是由于延迟决定并发执行部分代码而出现的,并且代码依赖于非线程安全对象。

关于java - 为什么 Spring 单例范围的 bean 比经典的单例模式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339221/

相关文章:

python - 如何将我的 Python 代码组织成多个类?

java - 为什么 Kotlins 类型推断会失败,而 Javas 却不会?

java - 如何使用 Joda-Time 在 Java 中设置时间属性

Spring + JPA + Postgresql 配置

spring - 为什么Spring Boot应用pom需要spring-boot-starter-parent和spring-boot-starter-web?

java - 使用哪种设计模式可以轻松添加新算法?

java - 启动依赖服务的设计模式

java - 将 CIDR 表示法转换为 IP 范围,无需其他库

java - 图像叠加 Java

java - 为什么 @Configuration 类没有在 Spring Boot 测试中运行?