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

Tah*_*erT 4 spring dependency-injection ioc-container

可以在IOC容器中创建的对象可以被称为Singleton,如果是,为什么如果没有原因?

任何人都可以用简单的语言详细解释我IOC conatiner如何精确管理对象..

kho*_*tyn 6

你可以说春天的单身人士不是单身人士.

Singleton有其有意义的范围,spring singleton范围是spring ioc容器.经典单身人士的有意义范围是ClassLoader.你可以在这里找到更多关于这些单身人士之间的区别:弹簧单身人士不是单身人士.

Spring在hashmap(Singleton Cache)中管理它的单例.当你从spring ioc容器中获取bean时,它首先检查bean是否已经存在于单例缓存中,如果是,它会从单例缓存中返回bean


Boz*_*zho 1

Spring(和其他 ioc 容器)提供不同的范围。其中一个范围是单例 - 即容器仅实例化对象一次并且仅提供/注入一个实例。单例是默认范围,因此从容器的角度来看,大多数 bean 确实是单例,即它们中只有一个实例。

但是,还有其他范围,例如prototype基于网络的requestsession.

管理bean 时,容器执行以下操作:

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

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