Spring框架相关问题

news2024/9/28 8:38:57

Spring框架相关问题

  • 一、Spring容器中的Bean是线程安全的吗?
  • 二、如何保证Spring容器中的Bean是线程安全的呢?
  • 三、什么情况下会触发Spring事务回滚?
  • 四、如果事务方法抛出IOException,是否会触发Spring事务回滚?
  • 五、什么情况下Spring事务会失效呢?
  • 六、对Spring框架Bean的生命周期有了解过吗?

一、Spring容器中的Bean是线程安全的吗?

答案:不是线程安全的;

  • Spring容器中的Bean默认是singleton单例的,所有线程都共享一个单例Bean,因此是存在资源竞争的;
  • 但在实际开发中,单例 Bean 一般都以无状态的方式来使用,即线程之间的操作不会对 Bean 的成员执行除查询以外的操作,所以这个单例 Bean 又可以说是线程安全的。比如:Controller、Service、Dao等这些Bean大多数是无状态的,我们不会对这些Bean中的属性
    进行修改操作,只需要关注方法本身即可;

二、如何保证Spring容器中的Bean是线程安全的呢?

1、把默认的 singleton 单例的 Bean 的改为 prototype 多例的Bean; 添加注解:@Scope("prototype")

2、在 Bean 对象中避免定义可变的成员变量;

3、如果 Bean 对象中需要定义可变成员变量,将可变成员变量保存在 ThreadLocal 中;

private ThreadLocal<Integer> numberThreadLocal = ThreadLocal.withInitial(() -> {
	return 0;
});

三、什么情况下会触发Spring事务回滚?

当执行发生异常的时候,触发Spring事务回滚。

@Transactional(rollbackFor = Exception.class)

在这里插入图片描述

四、如果事务方法抛出IOException,是否会触发Spring事务回滚?

如果采用Spring默认的事务回滚规则,它默认是发生RuntimeException异常时触发事务回滚,而现在是发抛出IOException异常,那不会触发Spring事务回滚;

如果想触发IOException异常事务回滚,需要指定回滚的规则;

@Transactional(rollbackFor = IOException.class)

在这里插入图片描述

五、什么情况下Spring事务会失效呢?

  • 考察对Spring的事务管理理解是否深刻;
  • 先举几个示例,进行分析,然后再总结答案;
    1、同一个Service中,方法A 标注事务注解,则方法B 没有标注事务注解;
    2、同一个Service中,没有标注事务注解的B方法调用标注了事务注解的A方法;事务失效
    3、不同的Service中,没有标注事务注解的B方法调用标注了事务注解的A方法;事务不失效
    4、标注了事务注解的public方法、protected方法、默认无修饰方法、private方法,final方法,static方法;只有Public方法事务生效
    5、多线程中的事务;事务失效

事务失效情况:
1、异常类型错误;IOException类型
2、方法或类上没有标注@Transactional注解;
3、同一类中,方法内部自调用;
4、事务方法不是public的;
5、多线程调用;
6、异常被try … catch
7、手动抛了别的异常 IOException
8、事务方法所在的Bean未被 Spring 容器管理
9、方法的事务传播类型不支持事务
10、表的数据库引擎不支持事务,比如MyISAM存储引擎不支持事务;

六、对Spring框架Bean的生命周期有了解过吗?

1、解析 xml 配置或者注解的类,得到 BeanDefinition
2、通过 BeanDefinition 反射创建 Bean 对象(实例化 Bean 对象)。
3、对 Bean 对象进行属性填充
4、回调实现 Aware 接口的方法,比如 BeanNameAware
5、调用BeanPostProcessor的初始化前方法;
6、调用init初始化方法(如果有的话);
7、调用BeanPostProcessor的初始化后方法,此处会进行 AOP;
8、将创建好的 Bean 对象放入一个 Map 中;
9、业务中使用 Bean 对象就从 Map 中获取;
10、Spring 容器关闭时调用 DisposableBeandestory 方法销毁 Bean 对象;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1485672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线简历制作网站免费推荐收藏备用

今天给大家推荐一个很实用的网站&#xff0c;对于要毕业的同学或者说跳槽的朋友比较有作用&#xff0c;对&#xff0c;就是一个免费方便的在线简历制作网站。其实免费的简历制作网站很多&#xff0c;但好用的良心的其实并不多&#xff0c;今天要推荐的这个虽然模板不算多&#…

1.2 在卷积神经网络中,如何计算各层感受野的大小

1.2 在卷积神经网络中&#xff0c;如何计算各层感受野的大小 分析与解答&#xff1a; 在卷积神经网络中&#xff0c;由于卷积的局部连接性&#xff0c;输出特征图上的每个节点的取值&#xff0c;是由卷积核在输入特征图对应位置的局部区域内进行卷积而得到的&#xff0c;因此这…

sql注入之sqli-labs/less-3 单引号加括号闭合

输入单引号试探&#xff1a; id1 报错信息里面出现 ) 说明闭合符合里面还有个 ) 再次试探&#xff1a;id1 ) order by 3 -- 查看回显位置&#xff1a; id-1%20%27)%20union%20select%201,2,3%20-- 查看数据库&#xff1a; id-1%20%27)%20union%20select%201,2,database()%2…

PDF 解析问题调研

说点真实的感受 &#xff1a;网上看啥组件都好&#xff0c;实际测&#xff0c;啥组件都不行。效果好的不开源收费&#xff0c;开源的效果不好。测试下来&#xff0c;发现把组件融合起来&#xff0c;还是能不花钱解决问题的&#xff0c;都是麻烦折腾一些。 这里分享了目前网上能…

幻兽帕鲁专用服务器搭建之Linux部署配置教程

大家好我是飞飞&#xff0c;上一期我分享了Windows系统的幻兽帕鲁服务器搭建教程。因为幻兽帕鲁这游戏对服务器的配置有一定的要求&#xff0c;很多小伙伴就寻思用Linux系统搭建占用会不会小一点&#xff1f;有计算机基础的小伙伴都知道Linux系统和Windows系统相比&#xff0c;…

Git实战(2)

git work flow ------------------------------------------------------- ---------------------------------------------------------------- 场景问题及处理 问题1&#xff1a;最近提交了 a,b,c,d记录&#xff0c;想把b记录删掉其他提交记录保留&#xff1a; git reset …

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置(上)

Hololens 2应用开发系列&#xff08;2&#xff09;——MRTK基础知识及配置文件配置 一、前言二、MRTK基础知识2.1 MRTK概述2.2 MRTK运行逻辑2.3 MRTK配置文件介绍2.4 MRTK服务 三、配置文件使用3.1 总配置文件3.2 相机配置3.3 其他配置 参考文献 一、前言 在前面的文章中&…

机器学习中类别不平衡问题的解决方案

类别不平衡问题 解决方案简单方法收集数据调整权重阈值移动 数据层面欠采样过采样采样方法的优劣 算法层面代价敏感集成学习&#xff1a;EasyEnsemble 总结 类别不平衡&#xff08;class-imbalance&#xff09;就是指分类任务中不同类别的训练样例数目差别很大的情况 解决方案…

解决Excel客户端中的Copilot灰色不可用

很多小伙伴已经用上了office套件中的copilot功能 Copilot for Microsoft 365账号介绍与相关问题的解答 Copilot for Microsoft 365账号登录指南 Copilot for Microsoft 365功能使用指南 问题发现 大部分人使用的都是Word和PowerPoint功能&#xff0c;但是也有部分小伙伴使…

Vue项目的快速搭建

Vue项目的快速搭建 一、下载并安装node.js二、安装Vue脚手架三、创建vue项目四、项目启动五、VS Code下载安装 一、下载并安装node.js 首先确保已经安装了Node.js。如果没有安装&#xff0c;可以去官网&#xff08;https://nodejs.org/&#xff09;下载并安装最新版本的Node.j…

第16章-DNS

目录 1. 域名 1.1 产生背景 1.2 概述 1.3 域名的树形层次化结构 2. DNS 2.1 概述 2.2 工作机制 3. DNS查询模式 3.1 递归查询&#xff1a; 3.2 迭代查询&#xff1a; 4. 相关知识点 4.1 集中式DNS 4.2 国内通用DNS 4.3 配置DNS代理 1. 域名 1.1 产生背景 ① IP…

rhcsa(rh134)

shell 查看用户shell a、如下查看/etc/shells文件列出了系统上所有可用的 shell&#xff08;具体的可用的 shell 列表可能会因不同的红帽版本和配置而有所不同&#xff09; &#xff08;如下图/etc/shells文件包含/bin/tmux并不意味着tmux是一个shell。实际上&#xff0c;/etc/…

通过多进程并发方式(fork)实现服务器(注意要回收子进程)

以下内容为视频学习记录。 1、父进程accept后返回的文件描述符为cfd以及用于创建连接的lfd; 调用fork()创建子进程后&#xff0c;子进程继承cfd,lfd&#xff0c;通过该cfd与连接过来的客户端通信,lfd对子进程来说没用&#xff0c;可以直接close(lfd); 对于父进程来说&#x…

web基础03-JavaScript

目录 一、JavaScript基础 1.变量 2.输出 3.变量提升 4.区块 5.JavaScript数据类型 6.查看数值类型 7.undefined和null 8.布尔值 9.和的区别 10.算数/三元/比较/逻辑/赋值运算符 11.特殊字符 12.字符串 &#xff08;1&#xff09;获取字符串长度 &#xff08;2&am…

C# Open Vocabulary Object Detection 部署开放域目标检测

目录 介绍 效果 模型信息 owlvit-image.onnx owlvit-post.onnx owlvit-text.onnx 项目 代码 Form1.cs OWLVIT.cs 下载 C# Open Vocabulary Object Detection 部署开放域目标检测 介绍 训练源码地址&#xff1a;https://github.com/google-research/scenic/tree/…

flink重温笔记(九):Flink 高级 API 开发——flink 四大基石之WaterMark(Time为核心)

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 9 天啦&#xff01;学习了 flink 四大基石之 Time的应用—> Watermark&#xff08;水印&#xff0c;也称水位线&#xff09;&#xff0c;主要是解决数据由于网络延迟问题&#xff0c;出现数据乱序或者迟到数据现象&…

九州金榜|导致孩子厌学的家庭因素有哪些?

造成孩子厌学的因素有很多&#xff0c;其中家庭因素是非常重要的因素&#xff0c;而家庭因素造成孩子厌学的原因主要是因为家长在教育中&#xff0c;更多的不懂如何正确教育孩子&#xff0c;就会造成孩子厌学&#xff0c;下面九州金榜家庭教育从以下几个方面分析因为家庭因素造…

C/C++工程师面试题(数据库篇)

索引的优缺点 索引是一种支持快速查找特定行的数据结构&#xff0c;如果没有索引&#xff0c;就需要遍历整个表进行查找。用于提高数据检索的速度和效率。 好处&#xff1a; 提高检索速度&#xff1a; 索引可以加快数据的检索速度&#xff0c;因为它们允许数据库系统直接定位到…

枚举法实例以及试题

题目 1 因子个数 思路: 从因子1找到它本身,其中我们发现因子都是成对出现的,除非它是完全平方数,因此我们采用for循环一个一个找出来就行,查找它因子的个数。 题目 2 阶乘因子 思路: 创建一个【n+1】的数组,初始值全都为0,用来存放它的质数因子个数。用两个for循环,…

mTLS: openssl创建CA证书

证书可以通过openssl或者keytool创建&#xff0c;在本篇文章中&#xff0c;只介绍openssl。 openssl 生成证书 申请操作流程 生成ca证书私钥, 文件名&#xff1a;ca.key生成ca证书&#xff0c;文件名&#xff1a;ca.crt生成Server/Client 证书私钥&#xff0c;文件名&#x…