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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 电赛前期准备[通俗易懂]

    电赛前期准备[通俗易懂]根据竞赛的特点,我们可以将赛前培训可划分为条件准备和实践训练两大部分。我们的讨论以赛前条件准备工作为主。刘开华条件准备工作可划分为:组织准备:主要是邀请指导教师、组建队伍,主攻方向确定。知识准备:包括基础知识、专业知识、通用元器件应用知识和电子系统设计知识。能力准备:创新能力,软件编程能力,电路设计与调试能力,系统设计、制作与调试能力,仪器使用与…

    2022年5月9日
    69
  • docker dockerfile详解_docker常用命令

    docker dockerfile详解_docker常用命令前言Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。Dockerfile简介Dockerfile是用来构建Docker镜像的构建文件,是由一系列

    2022年7月29日
    6
  • c++11新特性之宽窄字符转换

    C++11增加了unicode字面量的支持,可以通过L来定义宽字符:str::wstringstr=L"中国人";将宽字符转换为窄字符串需要用到codecvt库中的std:

    2021年12月28日
    43
  • 【史上最全】国内外常用精品API接口汇总[时间较久凑合着用吧]

    【史上最全】国内外常用精品API接口汇总[时间较久凑合着用吧]

    2022年2月18日
    60
  • Radmin远程管理全解析

    Radmin远程管理全解析

    2021年8月6日
    96
  • 微信小程序必用接口「建议收藏」

    微信小程序必用接口获取openiduni-app示例获取openidopenid是微信用户的一个唯一的标识,只针对当前的微信号有效。微信开发时,用户使用小程序需要授权,这时就要用到openid进行绑定这个用户。可用于永久标记一个用户,同时也是微信JSAPI支付的必传参数。一般都是将code值传到后端去获取openid,因为在前端可能会被抓包或爬取到你的appid和secret,不安全,如果放在后端获取openid,除非你的服务器被攻击了,不然就是安全的。下面的实例是在前端直接获取的,这个明白后,可

    2022年4月11日
    42

发表回复

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

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