Spring中Bean的作用域

107 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天

Spring中Bean的作用域

Bean支持的五种作用域描述
作用域名称描述
singleton单例模式,在该模式下容器中只会存在一个共享的Bean实例,所有对Bean的请求,只要请求的id(name)与Bean的定义相匹配,会返回Bean的同一个实例。
prototype原型模式,每次从容器中请求Bean时,都会产生一个新的实例
request每一个HTTP请求都会有自己的Bean实例,该作用域只能在基于Web的Spring ApplicationContext中作用
session每一个HTTPsession请求都会有自己的Bean实例,该作用域只能在基于Web的Spring ApplicationContext中作用
global session限定一个Bean的作用域为Web应用(HTTPsession)的生命周期,只有在Web应用中使用Spring时,该作用域才有效

这里我们详细介绍前两种

singleton的作用域介绍

singleton是Spring容器默认的作用域,当Bean的作用域为singleton时,Spring容器就只会存在一个共享的Bean实例,该实例可重复使用,Spring容器管理着Bean的生命周期,包括Bean的创建、初始化、销毁。因为创建和销毁Bean实例会带来一定的系统开销,所以singleton作用域可避免反复创建和销毁实例造成的资源消耗。

在Spring配置文件中,可以使用元素的scope属性,将Bean的作用域定义成为singleton:

<bean id="scope" class="com.hexiaoxing.scope.Scope" scope="singleton"/>
prototype的作用域介绍

当Bean的作用域为 prototype,每次对Bean请求时都会创建一个新的Bean实例,Spring容器只负责创建Bean实例而不再管理其生命周期

在Spring配置文件中,可以使用<bean>元素的scope属性,将Bean的作用域定义成为singleton:

<bean id="scope" class="com.hexiaoxing.scope.Scope" scope="prototype"/>