7.5 bean的作用域

创建bean定义时,你创建了一个配方,用于制造由这个bean定义描述的类的真实实例。一个bean定义就是一个配方的理念很重要,因为这意味着可以像使用类一样根据一个配方创建很多对象实例。

不仅可以控制要插入到从特定bean定义创建的对象中的各种依赖关系和配置值,还可以控制从特定bean定义创建的对象的作用域。这种方法强大而且灵活,可以通过配置来选择你创造的对象的作用域,而不必在Java类级别上明确对象的作用域。bean可以按照定义被部署为众多域分类中的一个:Spring框架提供七种可以即刻使用的作用域,其中五种只有在使用用于web的ApplicationContext时才可用。

以下作用域可以立即使用,你也可以创建自定义的租用域

Table 7.3. Bean scopes

作用域 描述
singleton (默认)将单一bean定义的作用域设为每个Spring IoC容器只有一个的对象实例。
prototype 将单一bean定义的作用域设为任意数量的对象实例。
request 将单一bean定义的作用域设为单一HTTP请求的生命周期;也就是说,每个HTTP请求都有它自己的根据单一bean定义创建的实例。只有在用于Web的SpringApplicationContext上下文中才有效。
session 将单一bean定义的作用域设为HTTP会话的生命周期。只有在用于Web的SpringApplicationContext上下文中才有效。
globalSession 将单一bean定义的作用域设为全局HTTP会话的生命周期。通常仅在Portlet上下文中使用时才有效。只有在用于Web的SpringApplicationContext上下文中才有效。
application 将单一bean定义的作用域设为ServletContext的生命周期。只有在用于Web的SpringApplicationContext上下文中才有效。
websocket 将单一bean定义的作用域设为WebSocket的生命周期。只有在用于Web的SpringApplicationContext上下文中才有效。

从Spring 3.0开始,线程作用域已经可用,但默认情况下未被注册。有关更多信息,请参阅SimpleThreadScope的文档。有关如何注册该作用域或任何其他自定义作用域的说明,请参阅“使用自定义作用域”一节