Singleton是反模式吗?

时间:2012-09-17 07:57:04

标签: spring singleton anti-patterns

Singleton是反模式吗?如果是,那么Spring中的依赖注入也是反模式(因为Spring提升默认的Singleton bean)?

2 个答案:

答案 0 :(得分:5)

硬编码单例并使用Spring创建单例bean之间存在重要区别:后者只是配置。

因为Spring不会阻止可测试性:它是一个单独的用例,其中bean被用作单例。您可以通过在测试中手动实例化它来轻松地使用相同的弹簧,或者用相同接口的模拟实现替换它。

如果您将类编码为单例,则无法在不重写的情况下轻松替换它。测试只是您可能想要替换它的一个示例。如果你意识到你需要两个不同的bean实例,那么你也会遇到硬编码的单例。

答案 1 :(得分:4)

Singleton模式不是反模式,它是限制实例数量的模式 对象。

但滥用单例来提供全局实例是一种反模式。

关于你问题的春天部分,请看Joachim Sauer回答。