代码之家  ›  专栏  ›  技术社区  ›  TaherT

在IoC容器中创建的对象可以称为Singleton。如果没有——为什么?

  •  4
  • TaherT  · 技术社区  · 15 年前

    IOC容器中创建的对象是否可以称为Singleton如果是为什么如果否为什么?

    谁能用简单的语言详细解释一下IOC conatiner是如何管理这些物品的。。

    5 回复  |  直到 15 年前
        1
  •  7
  •   khotyn    15 年前

    你可以说春天的单身汉不是单身汉。

    Singleton有其有意义的作用域,spring Singleton作用域是spring ioc容器。经典的singleton有意义的作用域是ClassLoader。你可以在这里找到更多关于这类独生子女之间区别的信息: A spring singleton is not a singleton .

    Spring在hashmap(单例缓存)中管理其单例。当您从spring ioc容器中获得一个bean时,它首先检查该bean是否已经存在于单例缓存中,如果已经存在,它将从单例缓存中返回该bean

        2
  •  1
  •   Bozho    15 年前

    Spring(和其他ioc容器)提供了不同的作用域。其中一个作用域是singleton,即容器只实例化一次对象,只给出/注入一个实例。Singleton是默认的作用域,所以从容器的角度来看,大多数bean实际上都是Singleton——也就是说,它们只有一个实例。

    然而,还有其他范围,比如 prototype 还是基于网络的 request session .

    在里面 管理 对于bean,容器执行以下操作:

    • 调用 @PostConstruct @PreDestroy 方法(或init和destroy方法,通过任何可用的方式配置)
    • 注入所有定义的依赖项(=将容器中存在的其他bean设置为此bean的字段)
    • 围绕bean方法创建AOP方面

    注: 可以实例化定义为singleton bean的类的多个对象。容器只实例化一次对象,但您的代码不限于多次实例化。

        3
  •  0
  •   earldouglas    15 年前

    可以在IOC中创建对象吗 如果 是为什么如果不是为什么?

    Read this ,来自Spring参考。

    有人能详细解释一下吗 简单的话,国际奥委会的康纳到底是怎么说的 管理对象。。

    Read this ,来自Spring参考。

        4
  •  0
  •   Sean Patrick Floyd    15 年前

    我用了一个更通用的定义来定义单身:

    单体是指 保证在给定的环境中是唯一的 范围

    该作用域是传统单例定义中的类加载器,但其他可能的作用域包括:

    • 应用程序(可能是群集化的,因此经典的单例将没有帮助)
    • HTTP会话
    • 线程(通过ThreadLocals实现)
    • HTTP请求等。

    (我非常喜欢接缝法 Component.getInstance(Class, ScopeType) 这可以让你选择你想要一个单件的范围。)

        5
  •  0
  •   Rob Hruska MegalomanINA    14 年前

    你可能会发现 this Google Groups thread 有用的