代码之家  ›  专栏  ›  技术社区  ›  non sequitor

Spring如何维护单例和原型。…引擎盖下?

  •  4
  • non sequitor  · 技术社区  · 16 年前

    我使用Spring已经有一段时间了,但我真的不知道当我要求Spring在多个不同的服务类中注入一个DAO时,它总是同一个类,或者如果我要求原型每次都是一个新的,等等。有人能分享一些关于这种特别是“单例”的信息吗?因为它是最常用的,也可以谈谈可能包含状态但是单例的服务层类的线程安全问题

    1 回复  |  直到 16 年前
        1
  •  4
  •   ChssPly76    16 年前

    我不是想在这里做一个“LMGTFY”蠢蛋,但我怀疑没有人能比我更好地解释它 Spring documentation on bean scopes .

    不过,为了快速回答您的具体问题:

    1. Singleton bean(默认作用域)通常在加载时由bean工厂预先实例化(除非另有配置)。将其视为bean的id映射。当您请求bean时(直接或作为其他bean的依赖项,或者当它自动连接时),它会从该映射中获得。
    2. 原型bean不是预先实例化的;每次请求原型bean时,Spring都会创建并初始化一个新实例。
    3. 就多线程而言,Dean J(他删除了他的答案)是对的——你的服务不应该保持状态,或者如果保持状态,应该适当地同步。