Sus*_*ant -4 spring object inversion-of-control
我读到,每当我们在 spring 中执行 getBean() 时,它都会返回所需的对象。那么这是否意味着,如果我调用 getBean() 1000 次,就会创建 1000 个对象?如果是,那么 Spring 如何管理这些对象?如果否,请解释一下 Spring 如何在对象创建方面工作?有对象池之类的概念吗?请澄清我的疑问。我对 spring 很陌生,很困惑创建 spring 框架是为了让我们的任务变得简单还是让事情变得更复杂。Spring 似乎是一个 XML 网络 :(
来自关于单例 bean 工厂范围的 Spring 框架文档:
单例范围
仅管理单例 bean 的一个共享实例,并且对具有与该 bean 定义匹配的 id 或 id 的 bean 的所有请求都会导致 Spring 容器返回一个特定的 bean 实例。
换句话说,当您定义一个 bean 定义并将其范围限定为单例时,Spring IoC 容器将创建由该 bean 定义定义的对象的一个实例。该单个实例存储在此类单例 bean 的缓存中,并且该命名 bean 的所有后续请求和引用都会返回缓存的对象。
总而言之,不,Spring 只会在 bean 工厂中创建每个 bean 的单个实例,除非您将singleton的默认作用域更改为其他 bean 作用域。
其他 bean 范围包括:
Bean 范围
- 单例
- (默认)将单个 bean 定义范围限定为每个 Spring IoC 容器的单个对象实例。
- 原型
- 将单个 bean 定义的范围限定为任意数量的对象实例。
- 要求
- 将单个 bean 定义的范围限定为单个 HTTP 请求的生命周期;也就是说,每个 HTTP 请求都有自己的 bean 实例,该实例是在单个 bean 定义的基础上创建的。仅在 Web 感知的 Spring ApplicationContext 上下文中有效。
- 会议
- 将单个 bean 定义的范围限定为 HTTP 会话的生命周期。仅在 Web 感知的 Spring ApplicationContext 上下文中有效。
- 全球会议
- 将单个 bean 定义的范围限定为全局 HTTP 会话的生命周期。通常仅在 portlet 上下文中使用时才有效。仅在 Web 感知的 Spring ApplicationContext 上下文中有效。
| 归档时间: |
|
| 查看次数: |
2222 次 |
| 最近记录: |