Spring中bean的scope

Spring中bean的scope

    Spring容器中的bean具备不同的scope,最开始只有singleton和prototype,但是在2.0之后,又引入了三种类型:request、session和global session,不过这三种类型只能在Web应用中使用。

     在定义bean的时候,可以通过指定<bean>的singleton或者scope属性来指定相应对象的scope,例如:

Spring中bean的scope

   或者

Spring中bean的scope

一、Singleton

      配置中的bean定义可以看作是一个模板,容器会根据这个模板来构造对象。bean定义中的scope语义会决定:容器将根据这个模板构造多少对象实例,又该让这个对象实例存活多久。标记为拥有singleton scope的对象定义,在Spring的IoC容器中只存在一个对象实例,所有该对象的引用都共享这个实例。该实例从容器启动,并因为第一次被请求而初始化之后,将一直存活到容器退出,也就是说,它与IoC容器“几乎”拥有相同的“寿命”。

    下图是Spring参考文档中给出的singleton的bean的实例化和注入语义示意图,或许更能形象得说明问题

Spring中bean的scope

二、Prototype

      针对声明为拥有prototype scope的bean定义,容器在接到该类型对象的请求的时候,会每次都重新生成一个新的实例对象给请求方。虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回请求方之后,容器就不再拥有当前返回对象的引用,请求方需要自己负责当前返回对象的后继的声明周期的管理工作,例如该对象的销毁。也就是说,容器每次返回给请求方一个新的实例对象后,就任由这个对象“自生自灭”了。

    对于那些请求方不能共享使用的对象类型,应该将其bean定义的scope设置为prototype。这样,每个请求方可以得到自己专有的一个对象实例。通常,声明为prototype的对象都是一些有状态的,比如保存每个顾客信息的对象。

    从Spring参考文档下的这幅图片,可以再次了解prototype scope的bean定义,在实例化对象和注入依赖的时候,它的具体语义是什么样子。

Spring中bean的scopeprototype scope用以下两个ban定义的效果是一样的:

Spring中bean的scope

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109075.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java se与java 的区别_java se与java的区别是什么

    java se与java 的区别_java se与java的区别是什么Java是一门程序设计语言,它有三个版本,JavaSE(标准版)、JavaEE(企业版)和JavaME(微型版)。而JavaSE只是一个使用Java进行编程的规范、框架,它不是一门编程语言。JavaSE(javastandardedition),一般包括jdk、jre以及各种API文档等。JavaSE(JavaPlatform,StandardEdition)。JavaSE以…

    2022年7月9日
    25
  • [Odoo] Odoo Postgres 遇到 5432 的问题解决办法[通俗易懂]

    [Odoo] Odoo Postgres 遇到 5432 的问题解决办法[通俗易懂]把odoo.conf文件还原到最原始状态然后把odoo.conf中的路径替换为自己的路径重启Odoo服务

    2022年6月19日
    25
  • 物联网用什么系统(物联网技术)

    前言  操作系统是物联网时代的战略制高点,今天PC和手机时代的操作系统霸主未必能在物联网时代延续霸业。操作系统产业的规律是,当垄断已经形成,后来者就很难颠覆,只有等待下一次产业浪潮。如今,一个全新的、充满想象空间的操作系统市场机会正在开启。  如此关键的产业环节必然是兵家必争之地。ARM、谷歌、微软、华为、阿里、海尔等国内外著名的IT企业纷纷推出物联网操作系统,整个产业呈现出群雄逐鹿的壮

    2022年4月13日
    218
  • Laravel 5.4 数据库迁移一次之后就不起作用!

    Laravel 5.4 数据库迁移一次之后就不起作用!

    2021年11月5日
    42
  • Labelimg制作数据集「建议收藏」

    Labelimg制作数据集「建议收藏」Labelimg制作数据集1、安装labelimg①下载源码自行安装,安装步骤参考搜索文章下载地址:https://github.com/tzutalin/labelImg②下载打包版直接运行,Windows和Linux平台可用,无需编译下载地址:http://tzutalin.github.io/labelImg/2、图片标注①仿照VOC2007在py-faster-rc…

    2022年6月16日
    33
  • 安卓系统文件夹结构及其文件解析(详细)_不压缩文件夹设置密码

    安卓系统文件夹结构及其文件解析(详细)_不压缩文件夹设置密码安卓系统文件夹结构详解核system\\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\\data\\文件夹中。下面是详细的介绍:\\system\\app\\AlarmClock.apk闹钟\\system\\app\\AlarmClock.odex\\system\\…

    2022年10月9日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号