好奇springmvc是单例的还是多例的?

好奇springmvc是单例的还是多例的?

最近看见一个面试题,springmvc是单例的还是多例的?当时犹豫了好久,想着多例吧。错误!默认是单例的。

有状态对象(Stateful Bean) :就是有实例变量的对象,可以保存数据,是非线程安全的。每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。

无状态对象(Stateless Bean):就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。

在这里插入图片描述
测试 http://localhost:8080/mvc/add num----> 1
http://localhost:8080/mvc/add num----> 2
http://localhost:8080/mvc/reduce num----> 1
在这里插入图片描述

控制台打印出结果证明 单例 从始至终 num都是一个实例


再次测试 加入**@Scope(“prototype”)** 变成多例 再看下num的数值
在这里插入图片描述
测试 http://localhost:8080/mvc/add num----> 1
http://localhost:8080/mvc/add num----> 1
http://localhost:8080/mvc/reduce num----> -1
在这里插入图片描述


为什么是单例的?

  1. 减少实例生成的系统消耗,效率会高
  2. gc垃圾回收,就不会回收,因为没有生成实例
  3. 可以更快的获取到bean ,第一次生成之后 ,就不会再次生成,每次取都是缓存中取

有一个很大的劣势,不能保证线程安全
全局变量和静态变量会引起线程安全问题
若所有的操作都是对变量进行读操作就不会引起线程问题,若有写的操作,那么就需要考虑线程安全问题

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值