get it [springmvc controller 单例说明以及多例切换]

spring的bean作用域种类:

1)singleton:单例模式,当spring创建applicationContext容器的时候,spring会欲初始化所有的该作用域实例,加上lazy-init就可以避免预处理;

2)prototype:原型模式,每次通过getBean获取该bean就会新产生一个实例,创建后spring将不再对其管理;

3)request:每次请求都新产生一个实例,和prototype不同就是创建后,接下来的管理,spring依然在监听

4)session:每次会话,同上

5)global session:全局的web域,类似于servlet中的application

 

为什么spring默认推荐singleton呢?

高并发下能极大的节省资源,提高服务抗压能力。采用单例模式的好处:

  • 为了性能,单例不用每次都new。
  • 默认场景不需要多例(提供多例转换)。

单例模式下容易出现的问题就是controller中定义很多的属性,那么单例肯定会出现竞争访问,不同用户共享数据变量是不安全的。因此:

  • 不要在controller中定义成员变量。
  • 万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。
  • 在Controller中使用ThreadLocal变量

怎样切换多例呢?

在class上面加一个@Scope("xxx"),xxx 的值为bean作用域如:request、prototype。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值