繁体   English   中英

我们是否应该将Spring单例用于DAO

[英]Should we use spring singletons for DAOs

在我们的Web应用程序中,我们使用Spring作为依赖项注入机制。 我们有多个DAO和Manager弹簧bean,它们的默认作用域为单例,并确保所有这些bean都是无状态的。 我已经在很多地方读到了为什么单例模式不好:单例有什么不好? 。请原谅我是否已问过,但请回答上述设计是否受不良编码规范的影响,以及如何对其进行改进。

正如您在对发布的链接的第一个响应中看到的( 单身人士的不幸之处,单身 人士的 三个问题是

  • 在代码中隐藏应用程序的依赖项
  • 违反单一责任原则
  • 代码强耦合

如果您通过spring依赖注入使用单例,则它们都不存在 ,因为:

  • 依赖关系存储在配置文件中,而不是代码中
  • 唯一负责任的原则没有被破坏,因为您的刀模的构造是由弹簧引擎而不是您的刀模来处理的
  • 代码耦合不强,因为可以在不更改代码的情况下更改配置

因此,是的,使用春季单身人士可能是一个很好的解决方案,而不会遇到真正的单身人士的问题。

春季单例豆不使用单例模式。 它们只是被框架实例化了一次,并注入到需要它们的每个组件中。

单例模式被认为是反模式,主要是因为它使所有依赖它的类都难以测试。 春季单例豆根本没有这个问题。

单例的主要缺点是,如果它们具有任何状态,它们往往会导致不同客户端类之间的纠缠。 设计良好的服务类不应具有任何特定于操作的状态(它们通常具有对数据库池或其他资源的引用,在实例化时注入,然后在之后不进​​行更改),并且使用单例-适用于此类服务的范围限定的bean。

如果您从链接的问题中读到答案,它们实际上并不适用于Spring单例。 当单范围使用Spring豆他们不是很难测试,他们控制自己的创造, 它们通过一个接口来访问(或至少是应该的!)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM