
上QQ阅读APP看书,第一时间看更新
3.3 Bean的作用域
在Spring中不仅可以完成Bean的实例化,还可以为Bean指定作用域。在Spring 5.0中为Bean的实例定义了如表3.2所示的作用域。
表3.2 Bean的作用域

在表3.2所示的6种作用域中,singleton和prototype是最常用的两种,后面4种作用域仅在Web Spring应用程序上下文中使用,在本节将会对singleton和prototype进行详细的讲解。
3.3.1 singleton作用域
当将bean的scope设置为singleton时,Spring IoC容器仅生成和管理一个Bean实例。在使用id或name获取Bean实例时,IoC容器将返回共享的Bean实例。
由于singleton是scope的默认方式,因此有两种方式将bean的scope设置为singleton。配置文件示例代码如下:

或

测试singleton作用域,代码如下:

上述测试代码的运行结果如图3.5所示。

图3.5 singleton作用域的运行结果
从图3.5所示的运行结果可以得知,在使用id或name获取Bean实例时,IoC容器仅返回同一个Bean实例。
3.3.2 prototype作用域
当将bean的scope设置为prototype时,Spring IoC容器将为每次请求创建一个新的实例。如果将3.3.1中bean的配置修改如下:

则TestInstance的运行结果如图3.6所示。

图3.6 prototype作用域的运行结果
从图3.6所示的运行结果可以得知,在使用id或name两次获取Bean实例时,IoC容器将返回两个不同的Bean实例。