Spring 为啥默认把bean设计成单例的?这篇讲的明明白白的

蓝牙耳机充电仓——功能框架 数据传输:大部分充电仓会跟耳机通信,控制耳机开机、关机和进入可搜索模式等等。蓝牙耳机给大家的生活带来便利,来讲讲TWS蓝牙耳机的搭档充电仓吧!方便携带:如果耳机单独带着,指定能弄丢一个,有了充电仓就安全多了。收纳保护:把珍爱的耳机放入充电仓里,防止丢失、磕碰、刮花等。给耳机充电:提供电力补给,让耳机持续使用。 阅读详情

作者:小小木

juejin.im/post/5cab7ebf518825177637b2f9

熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton、prototype、request、session、global session。

如下图是官方文档上的截图,感兴趣的朋友可以进去看看这五种分别有什么不同。今天要介绍的是这五种中的前两种,也是Spring最初提供的bean scope singleton 和 prototype。

Spring官方文档介绍如下图:

更多内容可以看官方文档介绍,非常详细:

https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html


单例bean与原型bean的区别

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

1.画图分析

2.源码分析

生成bean时先判断单例的还是原型的

如果是单例的则先尝试从缓存里获取,没有在新创建

结论:

  1. 单例的bean只有第一次创建新的bean 后面都会复用该bean,所以不会频繁创建对象。

  2. 原型的bean每次都会新创建


单例bean的优势

由于不会每次都新创建新对象所以有一下几个性能上的优势:

1.减少了新生成实例的消耗

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

2.减少jvm垃圾回收

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

3.可以快速获取到bean

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

有关bean实例化相关可以看着篇文章:

https://juejin.im/post/5ca42bfa6fb9a05e17799e07


单例bean的劣势

单例的bean一个很大的劣势就是他不能做到线程安全!!!,由于所有请求都共享一个bean实例,所以这个bean要是有状态的一个bean的话可能在并发场景下出现问题,而原型的bean则不会有这样问题(但也有例外,比如他被单例bean依赖),因为给每个请求都新创建实例。关于这方面我正在准备写一篇文章,在整理当中,感兴趣的朋友可以关注我,我后续写一篇详细的文章。


总结

Spring 为啥把bean默认设计成单例?

答案:为了提高性能!!!从几个方面,

  1. 少创建实例

  2. 垃圾回收

  3. 缓存快速获取

单例有啥劣势?

如果是有状态的话在并发环境下线程不安全

推荐阅读

网站开发:从写代码到公网访问整个流程

两小时入门 Docker(好文推荐)

IDEA 2020,9个新特性曝光,程序员:追不上了。。。

推荐 33 个 IDEA 最牛配置,写代码太爽了

JVM 史上最最最完整深入解析(12000 字噢)


好文!必须点赞
地统计插值学习心得(一) (创建地统计图层工具用于根据现有的地统计图层或者地统计模型来创建包含新要素数据集的地统计图层,也就是使用构建好的地统计模型用到新的数据集中)这表明,远离极值的区域预测不受极值的影响,并且还表明,包括极值会导致钼元素浓度高的区域周围的预测明显变高。通常,我们使用同一个数据集进行建模和预测,但是在实际插值过程中,这两步的数据可以是不同的,这就是处理极值的诀窍。如果你的数据集有无法忽略的极值时(比如这些钼元素浓度),一种常见的方法是首先显式移除极值进行建模,然后在预测中使用整个数据集(包括极值)。 阅读详情

相关推荐

C# 进阶:打造WinForms中的动态交互式UserControl

本文深入探讨了如何在C# WinForms中创建动态交互式UserControl,以提升桌面应用的用户体验和代码复用性。通过剖析UserControl生命周期、事件体系,并结合一个可拖拽缩放的分割面板实战案例,详细讲解了鼠标键盘事件处理、自定义绘制、状态管理以及性能优化等核心技巧,帮助开发者封装复杂交互逻辑,打造专业级自定义控件。

weixin_29279153的博客 463

为什么Spring中的bean默认都是单例模式?

Spring的bean默认单例,主要是为了避免反射的低效率对整体框架的性能造成太大的影响。

java开发,随手记点东西。 3092

基于CRU和WorldClim的高分辨率(1km)气候数据生成

基于CRU和WorldClim的高分辨率(1km)气候数据生成

lhq7842955的博客 1694

Spring 为啥默认把bean设计成单例的?

点击上方“后端技术精选”,选择“置顶公众号”技术文章第一时间送达!>>今日推荐:面试题内容聚合作者:小小木juejin.im/post/5cab7ebf518...

Java笔记虾 636

AIGC实战——变分自编码器(Variational Autoencoder, VAE)

变分自编码器通过在模型中引入随机性,并限制潜空间中的点的分布来解决自编码器存在的问题。只需进行一些微小的调整,就可以将自编码器转换为变分自编码器,从而使其成为真正的生成模型。在本节中,我们介绍了变分自编码器的基本原理,并使用 `Keras` 实现了一个变分自编码器用于生成 Fashion-MNIST 图像。

盼小辉丶的博客 1万+

给跨代引用记一本账:Java GC 的分配路径、卡表写屏障与收集器版图快速回顾

本文把 Java GC 的零散名词串成一条推理链路:从 TLAB 指针碰撞分配、逃逸分析,到 Eden、Survivor 与晋升的四条路,重点拆解卡表与写屏障如何为老年代指向新生代的引用记账,及 Minor GC 如何只扫脏卡。基于 JDK 8 实测:分散写使 Young GC 停顿涨 10~15 倍,条件卡标记消除卡表伪共享,计数循环让 System.gc 等待 2.7 秒,Survivor 过小使晋升量增加约 400 倍。文末梳理 JDK 8 到 27 的收集器演进、选型路径与排查顺序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 17万+

Spring bean配置单例或多例模式

单例 spring bean 默认是单例默认,在对应.xml文件中的配置是: <bean id="user" class="..." scope="singleton"/> singleton就是配置这个bean是否是单例的,如果不写,就是默认值true。   单例模式:每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例 单例模式分为饿汉模式和懒汉模式...

鼓浪屿岛与海的博客 9909

PostgreSQL性能优化:如何搭建监控体系?

本文系统讲解如何构建企业级PostgreSQL监控体系,覆盖四大核心维度:基础设施层、数据库实例层、会话与查询层、对象与存储层。通过Prometheus+Grafana+ELK等工具链实现指标采集、可视化与告警闭环管理,详细解析关键监控指标、部署方法及告警策略设计,帮助DBA快速定位慢查询、连接泄漏、存储膨胀等典型故障,构建"看得见、管得住、防得早"的数据库运维能力。

数据知道的博客 2234

spring 在单例类中使用注解注入bean

本文转自 http://www.cnblogs.com/xiaxinggege/p/5893160.html 重点是@PostConstruct /** * @author: jerry * @Email: * @Company: * @Action: 日志处理工具类 * @DATE: 2016-9-19 */ @Component//泛指组件,当组件不好归类的时候,我们可以使用这个注解进行

Aseasonv的博客 3991

六、Tool 工具系统:让大模型拥有“手脚“

我问你一个问题:大模型能不能告诉你"北京今天天气怎么样"?能——它能用非常流畅的中文回答你不能——它不知道这个答案因为它没有联网能力,也没有实时数据。它可能会自信地编一个"今天晴,25 度"给你——这就是幻觉。问题出在哪?大模型是一个"推理引擎",不是一个"执行引擎"。它知道天气 API 怎么调用,但不能真的发出 HTTP 请求。它知道 Python 代码怎么写,但不能真的运行代码。它知道数学公式,但做不了精确的大数计算。Tool 工具系统解决的,就是这个"最后一公里"问题。

牛肉胡辣汤 160

【RH850/U2A】:功能安全

功能安全相关

3130

面试题:Spring为什么默认bean为单例?

Spring提供了5种scope分别是singleton、prototype、request、session、global session。 官方文档介绍: 单例bean与原型bean的区别 单例:一个bean被声明为单例时,处理多次请求时spring容器里只实例化一个bean,后续的请求公用这个对象,这个对象存储在一个map中,当有请求时,先在缓存中(map)查...

Lambda 6096

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2351

什么场景要用@bean_Spring 为啥默认把bean设计成单例的?这篇给你讲的明明白白的...

熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton、prototype、request、session、global session。如下图是官方文档上的截图,感兴趣的朋友可以进去看看这五种分别有什么不同。今天要介绍的是这五种中的前两种,也是Spring最初提供的bean scope singleton 和 prototype。Spring官方文档介绍如下图:...

weixin_39569051的博客 548

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring注解驱动开发第9讲——在@Import注解中使用ImportSelector接口导入bean

写在前面 在上一讲关于Spring的@Import注解的文章中,我们简单介绍了如何使用@Import注解给容器中快速导入一个组件,而我们知道,@Import注解总共包含三种使用方法,上一讲已经讲解完第一种方式了,今天我们就一起来学习下关于@Import注解非常重要的第二种方式,即ImportSelector接口的方式。 ImportSelector接口概述 ImportSelector接口是Spring中导入外部配置的核心接口,在Spring Boot的自动化配置和@EnableXXX(功能性注解)都有它的

李阿昀的博客 5185

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

历经几小时,终于把Spring IOC介绍和操作讲得明明白白

一、IOC和 Bean介绍 IOC也被称为DI。使用构造器参数,fatory参数,属性的方式的设置对象实例。在这个过程中创建bean的时候,容器会注入这些依赖,Bean本身通过使用类的直接构造来控制其依赖项的实例化或位置的过程,因为创建Bean的方式完成是反过来的,所以称为Inversion of Control (IoC)。说句人话就是以前创建对象是通过new,现在不new了,直接通过类的构造注入对象。 org.springframework.beans 和 org.springframework.c

weixin_51954021的博客 154

阿里P7总结的Spring注解笔记,把组件注册讲的明明白白

环境搭建 注解的方式是通过配置类的方式来注入组件,注解注入要比XML注入的方式简单,注解注入也需要在前者的基础上,添加一个spring-context的包,也是实际开发中常用的方式。 准备所需Jar包 Spring注解之组件注册 Spring提供了许多的注解配置,这样我们就可以通过注解的方式实现组件的注册,下图就是Spring中经常使用到的注解。 @ComponentScan和@Configurable 原先xml的方式 <?xml version="1.0" encoding=

yuandengta的博客 254

Spring Bean vs Component:为什么同样是“组件”,Java 却要发明一个 Bean?

为什么 Spring 世界一定要单独搞一个「Bean」这个名词?`@Component`、`@Service`、`@Repository` 这些注解到底算什么?它们和我们心里的「组件」到底是同一类东西,还是两个世界?

qq_40286307的博客 736

spring提供的关于bean生命周期的接口,一篇文章把InnoDB的事务机制给你弄的明明白白

上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。很多人担心学了容易忘,这里教你一个方法,那就是重复学习。打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

芯_v_648374雨馨博客 929

手把手带你吃透Spring Bean生命周期!从实例化到销毁全流程解析

作为Spring框架的核心机制之一,Bean的生命周期贯穿了从对象创建到资源释放的完整过程。无论是面试还是实际开发中,理解这一过程都能帮你解决90%以上的依赖注入、资源管理问题。

weixin_42148384的博客 1228

Spring中Bean显式装配和自动装配

何为装配 向bean中注入依赖项的过程即为装配,Spring中的装配大体有两种类型,一种就是显示的指定依赖项,另一种是通过一些规则自动的注入依赖项。 具体的讲,显示指定依赖项是直接指定依赖项的名称,非常明显和确定,所以称之为显示装配。而根据规则自动注入依赖项,是指由Spring容器自动的将符合指定类型或指定名称的依赖项注入到bean的属性中,这种装配称为自动装配。 显而易见的是,由于自动装配无须显示指定依赖项,所以更加的简单快速,目前应用的也是越来越多。 由于装配非常的重要,涵盖的内容也是Spring的核心

qq_37149892的博客 1021
上一篇: 两小时入门 Docker(好文推荐)
下一篇: Spring Boot + Solr全文检索微服务简易集成
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值