2

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

4

2 回答 2

5

硬编码单例和使用 Spring 创建单例 bean 之间有一个重要区别:后者只是配置。

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

如果你将一个类编码为一个单例,那么你不能轻易地替换它,而不重写它。测试只是您可能想要替换它的一个示例。如果您意识到您将需要该 bean 的两个不同实例,那么您也将被硬编码的单例所困。

于 2012-09-17T09:16:00.390 回答
4

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

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

对于您问题的春季部分,请参阅 Joachim Sauer 的回答。

于 2012-09-17T09:16:48.587 回答