跳到主要内容

Spring5中文文档【3】- IOC容器之Bean作用域

1. Bean作用域

本系列基于最新5.3.10版本,大部分内容copy于官方文档…
官方文档地址

创建bean definition 时,您创建了一个配方,用于创建由该 bean definition 定义的类的实际实例。bean definition是一个配方的想法很重要,因为这意味着,与类一样,您可以从单个配方创建许多对象实例。

您不仅可以控制要插入到从特定 bean definition创建的对象中的各种依赖项和配置值,还可以控制从特定 bean definition 创建的对象的范围。这种方法功能强大且灵活,因为您可以通过配置选择您创建的对象的范围,而不必在 Java 类级别设置对象的范围。可以将 Bean 定义为部署在多个范围之一中。

Spring Framework 支持六个范围,其中四个仅在您使用web程序时的ApplicationContext时才可用。您还可以创建自定义范围。

从Spring 3.0 开始,线程作用域可用,但默认情况下未注册。

下表描述了支持的范围:

范围描述

| singleton | (默认)将单个 bean 定义范围限定为每个 Spring IoC 容器的单个对象实例。 | | prototype | 将单个 bean 定义范围限定为任意数量的对象实例。 | | request | 将单个 bean 定义范围限定为单个 HTTP 请求的生命周期。也就是说,每个 HTTP 请求都有自己的 bean 实例,该 bean 实例是在单个 bean 定义的后面创建的。仅在 web-aware Spring 的上下文中有效ApplicationContext。 | | session | 将单个 bean 定义范围限定为 HTTP 的生命周期Session。仅在 web-aware Spring 的上下文中有效ApplicationContext。 | | | | | application | 将单个 bean 定义范围限定为ServletContext. 仅在 web-aware Spring 的上下文中有效ApplicationContext。 | | websocket | 将单个 bean 定义范围限定为WebSocket. 仅在 web-aware Spring 的上下文中有效ApplicationContext网络套接字。 |