【问题标题】:How does Spring maintain singletons,prototypes... under the hood?Spring 如何在后台维护单例、原型……?
【发布时间】:2009-10-14 17:23:15
【问题描述】:

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

【问题讨论】:

    标签: java spring


    【解决方案1】:

    我不想在这里成为“LMGTFY”笨蛋,但我怀疑有人会比Spring documentation on bean scopes 更好地解释它。

    不过,为了解决您的具体问题,请快速重复一下:

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

    【讨论】:

    • LMAO!!你知道我以前从来没有见过这个,我已经读过这个文档很多次了,但只是在寻找我想要的东西......应该保持我原来的模式,但后来我想到了哈哈......所以替换原则!
    • @ChssPly76:实际上这已经告诉了我我所知道的,我正在寻找更像内部的东西,是否有 Threadlocal 使用,Map 与 bean ids 在哪里/如何维护等
    • 没有 ThreadLocal 也没有同步,一切都包含在 BeanFactory 实例中。对于 Spring MVC,您可以选择让 Spring 在会话中同步控制器的方法,仅此而已。如果您对内部工作原理感兴趣,可以查看 (static.springsource.org/spring/docs/2.5.x/api/org/…) AbstractBeanFactory 源代码(及其子类,如 DefaultListableBeanFactory)。
    猜你喜欢
    • 1970-01-01
    • 2015-10-20
    • 2017-05-06
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多