AI 助理
备案 控制台
开发者社区 Java技术栈 文章 正文

Spring 中的 bean 为什么默认单例?

简介: 熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton、prototype、request、session、global session。如下图是官方文档上的截图,感兴趣的朋友可以进去看看这五种分别有什么不同。

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


如下图是官方文档上的截图,感兴趣的朋友可以进去看看这五种分别有什么不同。


今天要介绍的是这五种中的前两种,也是Spring最初提供的bean scope singleton 和 prototype。


Spring官方文档介绍如下图:


image.png


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


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.画图分析


image.png

image.png




###


2.源码分析


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

image.png



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


image.png


结论:


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


原型的bean每次都会新创建


单例bean的优势

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


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

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


2.减少jvm垃圾回收

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


3.可以快速获取到bean

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


单例bean的劣势

单例的bean一个很大的劣势就是他不能做到线程安全!!!


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


总结

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


答案:为了提高性能!!!


从几个方面:


少创建实例


垃圾回收


缓存快速获取


单例有啥劣势?

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


-编程工程师-
目录
相关文章
石小浪♪
|
9天前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
石小浪♪
44 9
Spring从入门到入土(bean的一些子标签及注解的使用)
程序员小海绵
|
1月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
程序员小海绵
100 24
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
Cyan_RA9
|
1月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
Cyan_RA9
162 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
杀死一只知更鸟debug
|
26天前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
杀死一只知更鸟debug
28 3
spring复习02,xml配置管理bean
猿java
|
9天前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
猿java
36 1
Codelinghu
|
11天前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
Codelinghu
12 1
猿java
|
12天前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
猿java
45 1
杀死一只知更鸟debug
|
26天前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
杀死一只知更鸟debug
23 0
spring复习03,注解配置管理bean
wljslmz
|
2月前
|
Java Spring
Spring Bean 方法的可见性要求以进行 Spring AOP 代理
【8月更文挑战第22天】
wljslmz
33 0
智物科技库
|
2月前
|
安全 Java C#
Spring创建的单例对象,存在线程安全问题吗?
Spring框架提供了多种Bean作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)、全局会话(GlobalSession)等。单例是默认作用域,保证每个Spring容器中只有一个Bean实例;原型作用域则每次请求都会创建一个新的Bean实例;请求和会话作用域分别与HTTP请求和会话绑定,在Web应用中有效。 单例Bean在多线程环境中可能面临线程安全问题,Spring容器虽然确保Bean的创建过程是线程安全的,但Bean的使用安全性需开发者自行保证。保持Bean无状态是最简单的线程安全策略;
智物科技库
56 0

Java技术栈

热门文章

最新文章

  • 1
    Spring Boot 中文乱码问题解决方案汇总
  • 2
    Spring-boot+Dubbo应用启停源码分析
  • 3
    深入解析@SpringBootApplication注解:简化Spring Boot应用的配置
  • 4
    深入理解Spring--动手实现一个简单的SpringIOC容器
  • 5
    基于Spring3 MVC实现基于HTML form表单文件上传
  • 6
    猿创征文|Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time.
  • 7
    【Spring实战】—— 15 Spring JDBC模板使用
  • 8
    Spring IOC 容器源码分析
  • 9
    第13章 SpringBoot集成模板引擎
  • 10
    Spring Assert主张 (参议院检测工具的方法-主张)
  • 1
    Spring Boot中的@Lazy注解:概念及实战应用
    136
  • 2
    docker部署postgresql数据库和整合springboot连接数据源
    143
  • 3
    spring kafka的问题集锦
    142
  • 4
    【spring】如何解决循环依赖
    202
  • 5
    【springboot】logback配置
    72
  • 6
    Python 爬虫:Spring Boot 反爬虫的成功案例
    638
  • 7
    JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
    543
  • 8
    Spring Boot版本管理
    46
  • 9
    Spring的@Retryable实现方法重试
    65
  • 10
    Spring Boot可以同时处理多少请求?
    111
  • 相关课程

    更多
  • 全面讲解Spring Cloud Alibaba技术栈(知识精讲+项目实战)第二阶段
  • 精通Spring Cloud Alibaba
  • 微服务框架 Spring Cloud 快速入门
  • Java Web开发系列课程 - Spring框架入门
  • Spring Boot 2.5.x开发实战
  • Spring Cloud微服务架构设计与开发实战
  • 相关电子书

    更多
  • 云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧
  • 微服务架构模式与原理Spring Cloud开发实战
  • 阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库
  • 相关实验场景

    更多
  • 从零搭建Spring Boot的Hello World
  • 下一篇
    AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片

    玻璃钢生产厂家汉堡玻璃钢雕塑党建文化玻璃钢人物雕塑费用玻璃钢广场不锈钢雕塑制作厂家贵州佛像玻璃钢雕塑市场玻璃钢雕塑摆放玻璃钢蜘蛛侠雕塑价格徐州商场大厅美陈呈贡玻璃钢雕塑设计与制作哪家好玻璃钢雕塑怎么邮寄广东节庆商场美陈制作信阳附近不锈钢玻璃钢雕塑徐州玻璃钢人物雕塑价格江苏户内玻璃钢雕塑生产厂家内江受欢迎的成都商场美陈新密商场美陈植物墙商场美陈经典案例定制玻璃钢雕塑多少钱上海玻璃钢雕塑定制玻璃钢景观雕塑制作成都雕塑用玻璃钢商场美陈dp点冬季商场商业美陈雕塑价格程爵玻璃钢雕塑厂家临安区玻璃钢金属雕塑价格清远玻璃钢雕塑电话多少建德玻璃钢花盆花器合肥玻璃钢校园雕塑设计惠州哈萨克玻璃钢人物雕塑玻璃钢雕塑和铜雕塑价格江苏公园玻璃钢雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化