当前位置: 首页 > article >正文

Spring中Bean的安全性问题--面试题

Spring中Bean的安全性

  • Spring中的Bean从何而来?
  • Spring中什么样的Bean存在线程安全问题?
  • 如何处理spring Bean的线程安全问题?

Spring中的Bean从何而来?

Spring中除了很多内置Bean以外,其他的Bean都是通过Spring配置来声明的,然后由Spring容器统一加载。Spring声明配置时会配置以下内容。如:class(全类名)、id(Bean的唯一标识)、Scope(作用域),之后Spring容器根据配置内容使用对应的策略来创建Bean的实例。
因此,Spring 容器中的 Bean 其实都是根据我们自己写的类来创建的实例。所以, Spring 中的 Bean 是否线程安全,跟 Spring 容器无关,只是交由 Spring 容器托管而已。

Spring中什么样的Bean存在线程安全问题?

Spring框架里的bean,在获取实例的时候都是默认的单例模式
在 Spring 定义的作用域中,其中有 prototype(多例 Bean)和 singleton(单例 Bean)。

  1. 定义为 prototype 的 Bean,是在每次 getBean 的时候都会创建一个新的对象。
  2. 定义为 singleton 的 Bean,在 Spring 容器中只会存在一个全局共享的实例。

多例 Bean 每次都会新创建新实例,也就是说线程之间不存在 Bean 共享的问题。因此,多例 Bean 是不存在线程安全问题的。而单例Bean 是所有线程共享的一个实例,因此,就可能会存在线程安全问题。

单例 Bean 又分为无状态 Bean 和有状态 Bean 。

  1. 无状态Bean:在多线程操作中只会对 Bean 的成员变量进行查询操作,不会修改成员变量的值,这样的 Bean称之为无状态 Bean 。所以,可想而知,无状态的单例 Bean 是不存在线程安全问题的。
  2. 有状态 Bean :但是在多线程操作中如果需要对 Bean 中的成员变量进行数据更新操作,这样的 Bean 称之为有状态 Bean ,所以,有状态的单例 Bean 就可能存在线程安全问题

如何处理spring Bean的线程安全问题?

处理有状态的 Bean 的线程安全问题有以下三种方法:

  1. 将 Bean 的作用域由“singleton”单例改为“prototype”多例 在 Bean
  2. 对象中避免定义可变的成员变量
  3. 在类中定义 Thread Local的成员变量,并将需要的可变成员便来给你保存在 Thread Local 中,Thread Local 本身就具备线程隔离的特性,这就相当于为每个线程提供了一个独立的变量副本,每个线程只需要操作自己的线程副本变量,从而解决线程安全问题
    如果大家想详细了解一下ThreadLocal可以看一下这个 ThreadLocal保证线程安全-面试题

http://www.kler.cn/news/12003.html

相关文章:

  • Spring IoC注解开发
  • 【我的创作纪念日】恒川的创作一周年
  • 剪枝与重参第五课:前置知识
  • 亚马逊云科技十七年持续进化,解锁Amazon S3的七项新发布
  • 关于运行时内存数据区的一些扩展概念
  • NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
  • elasticsearch 拼音分词器 自动补全。
  • 【测试面试汇总2】
  • 3.3 泰勒公式
  • 少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(选择题)2022年12月
  • 顺序表(更新版)——“数据结构与算法”
  • Go语言流处理,工厂模式,命令参数,序列化,单元测试
  • 计算机网络 实验六
  • DC插装式流量阀压力阀
  • UDP/TCP的相关性你知道几个?
  • St link V2驱动安装方法
  • Spring Security 6.0系列【22】源码篇之防护跨站请求伪造流程分析
  • 全回显SSRF测试两则
  • C语言 字符串解析strchr/strrchr/strtok//strtok_r函数使用
  • 苏州源特VPT87DDF01B 隔离变压器 小体积/SMD/3000VDC 隔离
  • 历代程序员都无法逃脱的诅咒 -- 低代码
  • nodejs+vue家庭菜谱食谱管理系统
  • C++ 图系列之基于有向无环图的拓扑排序算法
  • oracle远程克隆pdb
  • 协议篇之以太网UDP协议
  • python爬虫基础
  • 场景搭建、素材库、在线标绘等,四维轻云地理空间数据云管理平台新增了这些功能
  • 【python学习】基础篇-列表推导式快速生成列表
  • vue2 和 vue3 共存
  • 我在windows10下,使用CMake gui 编译krita源码