每次编写getBean()时都会创建Spring中的Object吗?

时间:2016-02-27 15:42:55

标签: spring object inversion-of-control

我已经读过,每当我们在spring中执行getBean()时,它都会返回所需的对象。 这是否意味着,如果我写了1000次调用getBean(),将创建千个对象? 如果是,那么Spring是如何管理这些对象的? 如果不是,请解释Spring如何在对象创建方面工作? 对象池有什么概念吗? 请澄清我的疑虑。我是春天的新手,并且是否创建弹簧框架以使我们的任务变得容易或使事情变得更复杂是非常困惑的。 Spring似乎是一个XML网络:(

1 个答案:

答案 0 :(得分:2)

来自Spring Framework documentation on singleton bean factory scope

  

单身范围

     

只管理单个bean的一个共享实例,以及所有   对具有与该bean定义匹配的id或id的bean的请求   导致Spring返回一个特定的bean实例   容器

     

换句话说,当你定义一个bean定义时,它就是   作为单例,Spring IoC容器只创建一个   该bean定义定义的对象的实例。这个单身   实例存储在这种单例bean的缓存中,以及所有   后续请求和该命名bean的引用返回   缓存的对象。

总结一下,不,Spring会在bean工厂中只创建每个bean的一个实例,除非你将 singleton 的默认范围更改为其他bean范围。

Other bean scopes包括:

  

Bean范围

     
  
singleton
(默认)将单个bean定义范围限定为a   每个Spring IoC的单个对象实例   容器

  
原型
范围单个bean   定义任意数量的对象实例。

  
请求
将单个bean定义作为范围   单个HTTP请求的生命周期;也就是说,每个HTTP请求都有它   在单个bean的后面创建的bean的自己的实例   定义。仅在具有Web感知功能的Spring环境中有效   ApplicationContext中。

  
会话
范围单一   bean定义到HTTP会话的生命周期。仅在有效期内有效   Web感知Spring ApplicationContext的上下文。

  
全局会话
将单个bean定义范围限定为   全局HTTP会话的生命周期。通常仅在portlet中使用时有效   上下文。仅在具有Web感知功能的Spring环境中有效   ApplicationContext。