Spring 学习笔记 Bean的作用域

在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域。作用域将对Bean的生命周期和创建方式产生影响。在低版本的Spring中,仅有两个作用域singleton和prototype,在spring 2.0中,针对WebApplicationContext新添了3个新的作用域。下面列出了Spring 2.0支持的所有作用域类型。

Bean的作用域类型

singleton :在Spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在;
prototype :每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new XxxBean()的操作;
request每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境.
session同一个HTTP  Session共享一个Bean,不同于HTTP Session使用不同的Bean。该作用域仅使用于WebApplicationContext环境.
globalSession:同一个全局Session贡献一个Bean,一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext环境.

    在低版本的Spring 中,由于只有两个Bean作用域,所以采用singletion="true|false"的配置方式,Spring为了向后兼容,依旧支持这种配置方式。不过Spring推荐采用新的配置方式:scope="<作用域类型>"。除了以上5中预定义的Bean作用域外,Spring还允许用户自定义Bean的作用域,可以通过org.springframework.beans.factory.config.Scope接口定义新的作用域,再通过org.springframwwork.beans.factory.config.CustomScopeConfigurer这个BeanFactoryPostProcessor注册定义的Bean作用域。不过我们认为在一般的应用中,Spring所提供的作用域已经能够满足应用的要求,用户很少需要自定义新的作用域。


原文地址:https://www.cnblogs.com/wuyida/p/6300368.html