栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring中的Controller和Service还有Dao,包括各种各样的Bean是线程安全的吗?我们应该怎么选择单例还是多例,如果单例好我们如何保存用户内数据

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring中的Controller和Service还有Dao,包括各种各样的Bean是线程安全的吗?我们应该怎么选择单例还是多例,如果单例好我们如何保存用户内数据

Spring中的Controller和Service还有Dao,包括各种各样的Bean默认情况下是线程安全的吗?
  • 先丢出结论:不是线程安全
  • 一.Spring bean作用域(scope)范围是
  • 二.百分之90的web项目都是使用默认单例,这样不会引起线程安全问题么?
  • 三.单例Bean,实际上分为有状态和无状态,
    • 3.1 无状态bean
    • 3.2 有状态bean
  • 四.我们都知道单例的bean比较好,我们这时候怎么在存储用户数据的情况下,使用单例模式呢?
  • 使用ThreadLocal对象存储用户信息




先丢出结论:不是线程安全

Spring容器中的bean没有考虑线程安全的部分,只考虑了作用域。并且在将对象注入容器时候,你的定义使用方式也会决定是否线程安全。比如你给他静态公共变量和私有变量保存用户数据。

一.Spring bean作用域(scope)范围是
  1. singleton:单例,默认作用域。全局有且仅有一个实例。
  2. prototype:每次获取Bean的时候会有一个新的实例。
  3. session:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效。
  4. request 每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效。
二.百分之90的web项目都是使用默认单例,这样不会引起线程安全问题么? 三.单例Bean,实际上分为有状态和无状态, 3.1 无状态bean

无状态就是只注重与方法本身,而不会去存储操作,说的简单就是只负责调用,只有这个操作就不会出现线程安全问题。

3.2 有状态bean

有状态bean就是希望线程本身就可以存储一些 对象内数据,比如非静态的一些属性数据,这时候使用作用域为singleton就会变得不安全,这时候建议使用多例prototype。

四.我们都知道单例的bean比较好,我们这时候怎么在存储用户数据的情况下,使用单例模式呢? 使用ThreadLocal对象存储用户信息

但是切记,一定要在当前线程调用的请求使用完后,即使清理当前线程下ThreadLocal中的数据,不然会导致信息混乱






如有错误欢迎指正

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/894261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号