Spring为什么默认是单例的?

目录

一、五种作用域

二、单例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依赖),因为给每个请求都新创建实例。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简单上手!快速将另一个报表的页面添加到 FastReport .NET!

FastReport 是功能齐全的报表控件,可以帮助开发者可以快速并高效地为.NET,VCL,COM,ActiveX应用程序添加报表支持,由于其独特的编程原则,现在已经成为了Delphi平台最优秀的报表控件,支持将编程开…

人车网租赁软件开发|人车网租赁系统|租赁系统源码功能

经过租赁小程序不只可以使物品得到充沛的运用,还能减少一些资源的浪费,租赁行业这两年因为互联网技术的完善,发展也在不断进步,租赁系统定制开发功能也在不断完善,那么企业想要开发租赁小程序的时分需求留意哪些方面呢…

长尾词挖掘,长尾词的优化方法有哪些

我们都知道,长尾词能给我们带来较高的流量和转化率,且优化难度低,成本低。今天就来分享长尾词的优化方法。 首先需要挖掘长尾词,挖掘长尾词的方法以下3种比较实用: 1、使用长尾词挖掘工具 可以通过第三方工…

小波和小波变换(应试)

零基础小白共计花费2小时38分04秒完成对小波的“平地起高楼”学习。 记录所有学习过程。 一、大致浏览PPT 这个阶段跳着看,太难的跳过 1.总结知识点 共四个部分 1.小波介绍 2.小波变换 小波变换的定义连续小波变换的定义离散小波变换小波重构 3.哈尔小波变换 …

【C++初阶】初识模板

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

地理空间数据云管理-四维轻云1.3.2-版本更新内容

很多用户想要在不上传数据的情况下查看案例数据,我们在四维轻云1.3.2版本中为新用户新增了示例项目。此外,此次更新还新增了标绘数据模式和场景定时保存提醒功能,优化了插件启动流程以及移动和旋转变化轴。 1、新增示例项目 示例项目中包含…

Ubuntu 登录提示信息`Message of The Day`(MOTD)定制与开关

一、效果 登录Ubuntu的时候,在控制台可能会弹出一系列提示消息,有欢迎消息、系统信息、更新信息等等: 这些提示消息被称为Message of The Day,简称MOTD。 Ubuntu与其它Linux版本不太一样,它引入了MOTD 的概念。 这些…

健康管理系统开发笔记

健康管理系统 项目介绍功能架构项目结构maven项目搭建 项目介绍 健康管理系统是一款应用于健康管理机构的业务系统,实现健康管理机构工作内容 可视化、会员管理专业化、健康评估数字化、健康干预流程化、知识库集成化,从而提 高健康管理师的工作效率&a…

Intradeco通过适用于Excel的Liquid UI自动执行SAP MM并节省80%的处理时间

背景 Intradeco为服装制造提供整体方法,涵盖所有阶段:从构思阶段到最终产品分销。它已发展成为一家全球垂直制造公司,客户遍布美国、墨西哥和加拿大。 挑战 提高运营效率 原因:人员必须浏览多个 SAP 事务才能为新材料创建采购订单…

面向对象——权限修饰符、匿名内部类

package关键字 为什么要有包? 将字节码(.class)进行分类存放 包其实就是文件夹 包的定义及注意事项 定义包的格式 package 包名 多级包用.分割,如package com.heima里面的.就是分隔符 定义包的注意事项 package语句必须是程序的第…

Dockerfile详解

Dockerfile是什么 Dockerfile就是一个纯文本,里面记录了一系列的构建指令,如选择基础镜像、拷贝文件、运行脚本等等,RUN, COPY, ADD指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤,最后就会创建出一…

分布式系统概念和设计——分布式事务

分布式系统概念和设计 分布式事务 访问多个服务器管理的对象的事务称为分布式事务。 当一个分布式事务结束时,事务的原子特性要求所有参与事务的服务器必须全部提交或全部放弃。 实现: 其中一个服务器承担了协调者的角色,保证在所有的服务器…

“微商城”项目(5登录和注册)

1.我的信息 在pages\User.vue文件中编写HTML结构代码&#xff0c;示例代码如下。 <template><div class"member"><div class"header-con"><router-link :to"{ name: login }" class"mui-navigate-right">&l…

Spring Cloud Alibaba - Sentinel(一)

目录 一、Sentinel介绍 1、什么是Sentinel 2、Sentinel好处 3、Sentinel下载和安装 二、搭建Sentinel项目 1、创建项目cloudalibaba-sentinel-service8401 三、Sentinel流控规则 1、流控规则基本介绍 2、新增流控 2.1、QPS直接失败案例 2.2、线程数直接失败案例 3、…

容器(第一篇)docker安装、基础操作命令

docker是什么&#xff1f; docker是一个go语言开发的应用容器引擎。 docker的作用&#xff1f; ①运行容器里的应用&#xff1b; ②docker是用来管理容器和镜像的一种工具。 容器 与 虚拟机 的区别&#xff1f; 容器 虚拟机所有容器共享宿主机…

【论文阅读】Neuralangelo:高保真神经表面重建

【论文阅读】Neuralangelo&#xff1a;高保真神经表面重建 Abstract1. Introduction2. Related work3. Approach3.1.预备工作3.2.数值梯度计算3.3.渐进细节层次3.4.优化 4. Experiments4.1. DTU Benchmark4.2. Tanks and Temples4.3.细节水平4.4.消融 5. Conclusion paper proj…

深度学习基础知识-tf.keras实例:衣物图像多分类分类器

参考书籍&#xff1a;《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Gron, Aurlien])》 本次使用的数据集是tf.keras.datasets.fashion_mnist&#xff0c;里面包含6w张图&#xff0c;涵盖10个分类。 import tensorflo…

Jmeter性能测试 (入门)

Jmeter是一款优秀的开源测试工具&#xff0c; 是每个资深测试工程师&#xff0c;必须掌握的测试工具&#xff0c;熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后&#xff0c; 能用Jmeter搞定的事情&#xff0c;你就不会使用LoadRunner了。 本文将通过一个实际的测试例…

IPV6地址基础

IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写&#xff0c;是互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代IPv4的下一代IP协议。其地址数量号称可以为全世界的每一粒沙子编上一个地址 1. ipv6地址表示方法 IPv6的…

MQTT与EMQ

文章目录 1 MQTT协议与EMQ中间件1.1 物联网消息协议MQTT1.1.1 什么是MQTT1.1.2 MQTT相关概念1.1.3 消息服务质量QoS——信息的可靠投递1.1.3.1 QoS0——消息服务质量为0&#xff0c;消息发送至多一次1.1.3.2 QoS1——消息发送至少一次1.1.3.3 QoS2——消息发送仅一次1.1.3.4 不…