美文网首页
spring为什么默认bean为单例?

spring为什么默认bean为单例?

作者: coder_girl | 来源:发表于2019-08-09 14:53 被阅读0次
spring为什么默认bean为单例?

Spring提供了5种scope分别是singleton、prototype、request、session、global session。

Spring官方文档介绍如下图:

spring为什么默认bean为单例?

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

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

…………………………………………………………………………………………………………………………………………………………

单例bean与原型bean的区别

单例:一个bean被声明为单例时,处理多次请求时spring容器里只实例化一个bean,后续的请求公用这个对象,这个对象存储在一个map中,当有请求时,先在缓存中(map)查找是否存在,存在则使用,不存在才实例化一个对象

原型:每当有请求来就实例化一个新的bean,没有缓存以及从缓存中查

1.画图分析

spring为什么默认bean为单例? spring为什么默认bean为单例?

2.源码分析

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

spring为什么默认bean为单例?

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

spring为什么默认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默认设计成单例?

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

少创建实例

垃圾回收

缓存快速获取

单例有啥劣势?

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

相关文章

  • spring整合Struts

    在spring中的Bean为单例,spring容器默认的作用域是单例,即每次外界向spring请求这个bean都会...

  • Spring 设计模式

    单例模式:Spring Bean 默认都是单例的。 工厂模式:Spring 主要作用之一就是对Bean的管理,所有...

  • 单例模式

    spring单例模式 spring的默认bean注入为单例,以下通过简单的例子进行测试: 创建2个类,分别为sin...

  • Spring 单例 Bean 与多线程深度分析

    Spring 的 bean默认是单例的,在高并发下,如果在 Spring 的单例 bean 中设置成员变量,则会发...

  • 《设计模式之禅》读书笔记-2.1-单例模式

    1 最佳实践 Spring的Bean默认是单例的,方便Spring容器管理Bean的生命周期。如果采用非单例,则B...

  • 某团Java面试题

    Spring的Bean是单例的吗,Controller是否是单例? 默认单例,可以配置成非单例(prototype...

  • spring为什么默认bean为单例?

    Spring提供了5种scope分别是singleton、prototype、request、session、gl...

  • Spring中Bean的实例过程

    Spring中Bean的实例过程 了解Bean的是实例化模式  默认情况下,Spring中的所有bean都是单例的...

  • Bean注入方式

    六星教育 - Spring源码分析1909 默认单例,注入为同一个对象 @Bean配置类注入:bean类,配置类(...

  • 《我想进大厂》之Spring夺命连环10问

    1.说说Spring 里用到了哪些设计模式? 单例模式:Spring 中的 Bean 默认情况下都是单例的。无需多...

网友评论

      本文标题:spring为什么默认bean为单例?

      本文链接:https://www.haomeiwen.com/subject/vdwfjctx.html