有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

在我们的web应用程序中,我们使用Spring作为依赖项注入机制。我们有多个DAO和Manager SpringBean,它们的默认作用域是singleton。我们已经确保所有这些bean都是无状态的。我在多个地方读过为什么单例模式不好:What is so bad about singletons?。如果已经有人问过,请原谅我,但如果上述设计属于糟糕的编码实践,请回答,以及如何对其进行改进


共 (4) 个答案

  1. # 1 楼答案

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

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

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

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

    因此,使用spring单例是一个非常好的解决方案,不会出现真正的单例问题

  2. # 2 楼答案

    如果你阅读了你链接的问题的答案,它们实际上并不适用于Spring单例。在单例范围内使用SpringBean时,它们不难测试,它们不控制自己的创建,并且它们通过接口访问(或者至少应该是这样!)

  3. # 3 楼答案

    Spring单例bean没有使用单例模式。它们恰好被框架实例化一次,然后注入到每个需要它们的组件中

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

  4. # 4 楼答案

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