怎么建立手机网站,如何最便宜建设一个网站,wordpress付费开通站点,小程序哪家公司做的好概 述
熟悉 Spring开发的朋友都知道 Spring 提供了 5种 scope#xff0c;分别是#xff1a;
singleton: 单例模式#xff0c;当spring创建applicationContext容器的时候#xff0c;spring会欲初始化所有的该作用域实例#xff0c;加上lazy-init就可以避免预处理#xf…概 述
熟悉 Spring开发的朋友都知道 Spring 提供了 5种 scope分别是
singleton: 单例模式当spring创建applicationContext容器的时候spring会欲初始化所有的该作用域实例加上lazy-init就可以避免预处理prototype原型模式每次通过getBean获取该bean就会新产生一个实例创建后spring将不再对其管理 下面是在web项目下才用到的request搞web的大家都应该明白request的域了吧就是每次请求都新产生一个实例和prototype不同就是创建后接下来的管理spring依然在监听session: 每次会话同上global session: 全局的web域类似于servlet中的application。
如下图是官方文档上的截图感兴趣的朋友可以进去看看这五种分别有什么不同。今天要介绍的是这五种中的前两种也是 Spring最初提供的 bean scopesingleton 和 prototype Spring 官方文档介绍如下图
单例bean与原型bean的区别
如果一个 bean被声明为单例的时候在处理多次请求的时候在 Spring 容器里只实例化出一个bean后续的请求都公用这个对象这个对象会保存在一个map里面。当有请求来的时候会先从 缓存(map) 里查看有没有有的话直接使用这个对象没有的话才实例化一个新的对象所以这是个单例的。但是对于 原型(prototype) bean 来说当每次请求来的时候直接实例化新的bean没有缓存以及从缓存查的过程。
1、画图分析 2、源码分析
生成 bean时先判断单例的还是原型的 如果是单例的则先尝试从缓存里获取没有在新创建
3、结论
单例的 bean只有第一次创建新的 bean 后面都会复用该 bean所以不会频繁创建对象。原型的 bean每次都会新创建
单例bean的优势
由于不会每次都新创建新对象所以有一下几个性能上的优势
减少了新生成实例的消耗 新生成实例消耗包括两方面第一Spring会通过反射或者 cglib来生成 bean实例这都是耗性能的操作其次给对象分配内存也会涉及复杂算法减少jvm垃圾回收 由于不会给每个请求都新生成bean实例所以自然回收的对象少了可以快速获取到 bean 因为单例的获取bean操作除了第一次生成之外其余的都是从缓存里获取的所以很快
单例bean的劣势
单例的 bean一个很大的劣势就是他不能做到线程安全由于所有请求都共享一个 bean实例所以这个 bean要是有状态的一个 bean的话可能在并发场景下出现问题而原型的 bean则不会有这样问题但也有例外比如他被单例 bean依赖因为给每个请求都新创建实例。