Spring为什么默认是单例的?

news2024/10/5 21:17:38

目录

一、五种作用域

二、单例bean与原型bean的区别

 三、单例Bean的优势与劣势


一、五种作用域

1.singleton:

singleton是Spring Bean的默认作用域,也就是单例模式。在整个应用程序中,只会创建一个实例,Bean的所有请求都会共享这个实例。

2.prototype:

prototype表示原型模式,每次请求都将创建一个新的Bean实例。因此,在应用程序中可以有多个实例,这些实例之间不会相互影响。

3.request:

request表示在HTTP请求范围内创建Bean实例。每次发出HTTP请求时,都会创建一个新的Bean实例,这个Bean实例只能在当前请求中使用。

4.session:

session表示在HTTP会话范围内创建Bean实例。在一次会话期间,只会创建一个Bean实例。如果在同一个会话期间发出多个请求,这些请求都将共享同一个Bean实例。

5.globalsession:

globalsession表示在全局HTTP会话范围内创建Bean实例。这个作用域只适用于基于portlet的Web应用程序。对于其他类型的Web应用程序,globalsession作用域与session作用域是相同的。

二、单例bean与原型bean的区别

如果一个Bean被声明为单例的时候,在处理多次请求的时候在Spring容器里面只实例化出一个Bean,后续的请求都公用这个对象,这个对象会保存到一个map里面。当有请求进来的时候,会先从缓存(map)里查看有没有,有的话直接使用这个对象,没有的话才实例化一个新的对象,所以这是个单例的。但是对于原型(prototype)bean来说,当每次请求进来的时候直接实例化新的bean,没有缓存以及从缓存查的过程。

 三、单例Bean的优势与劣势

优势:

1、减少了新生成实例的消耗:新生成实例消耗包括两方面,第一,Spring会通过反射或者cglib来生成bean实例,这都是消耗性能的操作,其次给对象分配内存也会涉及复杂算法。

2、减少jvm垃圾回收 :由于不会给每个请求都新生成bean实例,所以自然回收的对象少了。

3、可以快速获取到 bean:因为单例的获取bean操作除了第一次生成之外其余的都是从缓存里获取的,所以很快。

劣势:

单例的 bean一个很大的劣势就是他不能做到线程安全!!!由于所有请求都共享一个 bean实例,所以这个 bean要是有状态的一个 bean的话可能在并发场景下出现问题,而原型的 bean则不会有这样问题(但也有例外,比如他被单例 bean依赖),因为给每个请求都新创建实例。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/612494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ETLCloud轻松应对CDC实时数据流和维度数据合并的需求,实时监控订单数据

如何实现实时流与批流合并打宽数据 通常情况下我们使用CDC实时监听表销售或订单表数据的LOG时会形成流式的数据,即订单变化时数据是按照变化时间不断的传入到ETL的流程中的,业务希望实时看到订单数据的报表。 CDC每次传入的数据有可能是一条也可能是多…

基于geoserver开发地图发布服务

写在前面:我在github上创建了对应的项目,可点此跳转,本文的所有源码均可在项目里找到,欢迎大家访问交流 一、开发背景 在gis领域,geoserver是后端地图发布的开源项目。目前我们在启动服务后,可通过自带的…

科研工具-R-META分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

【AIGC】14、GLIPv2 | 在 GLIP 上扩展 negative phrase 并新增分割功能

文章目录 一、背景二、方法2.1 A Unified VL Formulation and Architecture2.2 GLIPv2 pre-training2.3 将 GLIPv2 迁移到 Localization 和 VL task 三、结果3.1 One model architecture for all3.2 One set of model parameters for all3.3 GLIPv2 as a strong few-shot learn…

Latex使用algorithm2e包写伪代码

用Latex写伪代码我们需要用到一个包,Algorithm2e,这个工具包的使用手册下载地址为(http://mlg.ulb.ac.be/files/algorithm2e.pdf)CSDN的链接为() 准备 导入该包 \usepackage[ruled,linesnumbered]{algor…

上海亚商投顾:沪指小幅震荡微涨 AI应用端持续活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 大小指数今日走势分化,沪指全天窄幅震荡,创业板指低开低走,盘中一度跌超1.6%&a…

【Java基础】I/O流 —— Java中的流都需要关闭吗?

目录 一、为什么要关闭流?二、close方法和flush方法1.使用close方法2.使用flush方法 三、流按指向分类四、不用关闭的流 一、为什么要关闭流? 涉及到对外部资源的读写操作,包括网络、硬盘等等的I/O流,如果在使用完毕之后不关闭&a…

Unity基础框架从0到1(六)对象池模块

索引 这是Unity基础框架从0到1的第六篇文章,框架系列的项目地址是:https://github.com/tang-xiaolong/SimpleGameFramework 文章最后有目前框架系列的思维导图,前面的文章和对应的视频我一起列到这里: 文章 Unity基础框架从0到…

算力不竭如江海,天翼云“息壤”如何助力千行百业算力智能调度?

科技云报道原创。 数字时代下,算力已成为新型生产力,并朝着多元泛在、安全可靠、绿色低碳的方向演进。以算力为核心的数字信息基础设施,是国家战略性布局的关键组成部分,也成为数字经济时代的“大国重器”。 作为云服务国家队&am…

报表生成器FastReport .Net教程:“Text“对象、文本编辑

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。 FastReport.NET官方版…

es elasticsearch 十四 各种机制 评分机制 正序索引 解决跳跃结果问题 解决耗时过长问题 解决相同属性值都到一个地方

目录 评分机制 机制 查看评分实现如何算出来的explaintrue 分析能否被搜索到 Doc value 正排序索引 Query phase Fetch phase Preference 问题 解决跳跃结果问题 Timeout 到达时间直接返回,解决耗时过长问题 Routing 数据准确分配到某地,解决相…

这才叫软件测试工程师,你那最多是混口饭吃罢了....

前些天和大学室友小聚了一下,喝酒喝大发了,谈天谈地谈人生理想,也谈到了我们各自的发展,感触颇多。曾经找工作我迷茫过、徘徊不,毕业那会我屡屡面试失败,处处碰壁;工作两年后我一度想要升职加薪…

006+limou+C语言“堆的实现”与“树的相关概念”

0.前言 这里是limou3434的一篇个人博文,感兴趣可以看看我的其他内容。本次我给您带来的是树的相关只是,并且把堆这一数据结构做了实现,后面还有大量的oj题目。但是树重点也就在这十多道oj题目中,您可以尝试着自己做一下&#xff…

我的创作纪念日|写在CSDN创作第512天

机缘 今天无意中发现CSDN后台给我发送私信,才发觉原来我的第一篇博客更新已经过去512天了,512天一晃而过居然还有点恍然。 作为一名网络专业的在校大学生,最初开始查找相关的资料其实更习惯于从外站进行查找,却总是在不经意中进入…

人事管理项目-前端实现

人事管理项目-前端实现 引入Element和Axios开发Login页面配置路由配置请求转发启动前端项目 引入Element和Axios 前端UI使用Element,网络请求则使用Axios,因此首先安装Element和Axios依赖,代码如下: 依赖添加成功后,接…

N-propargyloxycarbonyl-L-lysine,1215204-46-8,是一种基于赖氨酸的非天然氨基酸 (UAA)

产品描述: N-ε-propargyloxycarbonyl-L-lysine (H-L-Lys(Poc)-OH) 是一种基于赖氨酸的非天然氨基酸 (UAA)。 广泛用于多种生物体中荧光探针的生物偶联。 N- ε- Propargyloxycarbonyl-L-lysine (H-L-Lys (Poc) - OH) is a non natural amino acid (UAA) based on …

Kotlin Channel系列(一)之读懂Channel每一行源码

文章目录 有话说概述初识ChannelChannel种类Channel五大金刚SendReceiveClosedQueueBuffer Channel的行为Channel源码分析发送数据大动脉接收数据大动脉父类默认实现方式(RendezvousChannel)发送流程send()函数onSend()函数 接收流程receiveCatching()函数onReceiveCatching()函…

基于图像处理的圆检测与深度学习

基于图像处理的圆检测与深度学习 摘 要一、 绪论二 、图像预处理2.1 滤波算法2.2 边缘检测 三 、圆识别与定位算法3.2 定位算法3.2.1 迭代算法 4.1 数据处理 五、深度学习介绍:参考文献 摘 要 本文主要论述在图像处理的的基础上,为了克服图像背景中的亮…

SpringBootWeb案例-2(下)

3. 修改员工 需求:修改员工信息 在进行修改员工信息的时候,我们首先先要根据员工的ID查询员工的信息用于页面回显展示,然后用户修改员工数据之后,点击保存按钮,就可以将修改的数据提交到服务端,保存到数据…

面试专题:java虚拟机(2)

8.垃圾收集有哪些算法,各自的特点? 标记清除 直接将要回收的对象标记,发送gc的时候直接回收:特点回收特别快,但是回收以后会造成 很多不连续的内存空间,因此适合在老年代进行回收,CMS(current…