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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • poj 1488 TEX Quotes 双引号的改写 (☆☆☆☆☆)

    poj 1488 TEX Quotes 双引号的改写 (☆☆☆☆☆)

  • 后台管理系统 – 权限管理「建议收藏」

    后台管理系统 – 权限管理「建议收藏」不管是开发手机APP,网站还是小程序等项目,基本上都需要一个后台管理系统的支撑。而每个后台管理系统都有一个通用的功能就是用户权限管理。最近基于Antd+React.js做了一个后台管理系统。

  • EVE-NG模拟器教程(一)——安装包下载「建议收藏」

    EVE-NG模拟器教程(一)——安装包下载「建议收藏」一、EVE-NG基本简介EVE-NG(EmulatedVirtualEnvironment-NextGeneration)是一款由第三方制作的、功能强大的免费模拟器,是Unetlab(UnifiedNetworkingLab,统一网络实验室)模拟器的最新版本(Unetlab2.0),融合了dynamips,IOL,KVM,可以支持丰富的模拟镜像格式,不仅可以模拟交换机、路由器、防火墙等网络设备,还可以运行任何格式为qcow2的虚拟机。相比传统的模拟器(如GNS3),其最大特色就…

  • idea好用的插件推荐_CodeDate插件安装

    idea好用的插件推荐_CodeDate插件安装提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结i一、pandas是什么?二、使用步骤1.引入库2.读入数据总结Listitem系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步

    2022年10月17日
  • vue项目更新后清除浏览器缓存

    vue项目更新后清除浏览器缓存项目场景:vue项目更新后清除浏览器缓存解决方案:build/webpack.prod.conf.js里打包的文件路径添加时间戳constVersion=newDate().getTime()//获取当前时间戳output:{path:config.build.assetsRoot,//添加当前时间戳Version到打包的js文件中filename:utils.assetsPath(‘js/[name].[chunk..

  • RDD — flatmap

    RDD — flatmapflatmapflatmap简单用法defmain(args:Array[String]):Unit={//设置log级别Logger.getLogger(“org”).setLevel(Level.WARN)valconf=newSparkConf().setAppName(“WordCountDemo”).setMaster(“loca…

发表回复

您的电子邮箱地址不会被公开。

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