java - 我们应该为 DAO 使用 spring 单例吗

标签 java spring design-patterns dependency-injection singleton

在我们的 Web 应用程序中,我们使用 Spring 作为依赖注入(inject)机制。我们有多个 DAO 和默认范围为单例的 Manager spring bean。我们确保所有这些 bean 都是无状态的。我在多个地方读过为什么单例模式不好:What is so bad about singletons? .如果已经有人问过这个问题,请原谅我,但请回答上述设计是否受到不良编码实践的影响,以及如何对其进行改进。

最佳答案

正如您在对您发布的链接 (what is so bad about singleton) 的第一个回复中看到的那样,单例的三个问题是:

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

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

  • 依赖存储在配置文件中,而不是代码中
  • 单一责任原则并没有被打破,因为你的dao的构造是由spring引擎处理的,而不是你的dao
  • 代码不是强耦合的,因为可以在不更改代码的情况下更改配置

所以是的,使用 spring 单例可以是一个非常好的解决方案,没有真正的单例问题。

关于java - 我们应该为 DAO 使用 spring 单例吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693097/

相关文章:

java - FileChannel.transferTo() 不断传输 0 字节?

java - 如何模拟无法在测试中实例化的对象?

java - spring mvc - 如何在不创建 View 的情况下从 Controller 检索值

java - 如何在事件驱动的 Java 中避免繁忙的 while 循环

java - 对类型参数做出假设?

java - 为什么在ConcurrentHashMap中使用0.5作为泊松分布的参数?

json - JSON 序列化程序中的延迟加载错误

java - 当 Web 服务器线程中出现 OutOfMemoryError 时,Spring 启动请求会挂起

c# - MVC/EF6/WebApi2 应用程序中 DbContext 使用的正确模式

design-patterns - 固定一件事,打破另一件事。图案的名称是什么?