每日五道java面试题之spring篇(二)

目录:
- 第一题 Spring事务传播机制
- 第二题 Spring事务什么时候会失效?
- 第三题 什么是bean的⾃动装配,有哪些⽅式?
- 第四题 Spring中的Bean创建的⽣命周期有哪些步骤?
- 第五题 Spring中Bean是线程安全的吗?
第一题 Spring事务传播机制
多个事务⽅法相互调⽤时,事务如何在这些⽅法间传播,⽅法A是⼀个事务的⽅法,⽅法A执⾏过程中调⽤了⽅法B,那么⽅法B有⽆事务以及⽅法B对事务的要求不同都会对⽅法A的事务具体执⾏造成影响,同时⽅法A的事务对⽅法B的事务执⾏也有影响,这种影响具体是什么就由两个⽅法所定义的事务传播类型所决定。
- REQUIRED(Spring默认的事务传播类型):如果当前没有事务,则⾃⼰新建⼀个事务,如果当前存在事务,则加⼊这个事务
- SUPPORTS:当前存在事务,则加⼊当前事务,如果当前没有事务,就以⾮事务⽅法执⾏
- MANDATORY:当前存在事务,则加⼊当前事务,如果当前事务不存在,则抛出异常。
- REQUIRES_NEW:创建⼀个新事务,如果存在当前事务,则挂起该事务。
- NOT_SUPPORTED:以⾮事务⽅式执⾏,如果当前存在事务,则挂起当前事务
- NEVER:不使⽤事务,如果当前事务存在,则抛出异常
- NESTED:如果当前事务存在,则在嵌套事务中执⾏,否则REQUIRED的操作⼀样(开启⼀个事务)
第二题 Spring事务什么时候会失效?
spring事务的原理是AOP,进⾏了切⾯增强,那么失效的根本原因是这个AOP不起作⽤了!常⻅情况有如下⼏种
- 发⽣⾃调⽤,类⾥⾯使⽤this调⽤本类的⽅法(this通常省略),此时这个this对象不是代理类,⽽是UserService对象本身!解决⽅法很简单,让那个this变成UserService的代理类即可!
- ⽅法不是public的:@Transactional 只能⽤于 public 的⽅法上,否则事务不会失效,如果要⽤在⾮public ⽅法上,可以开启 AspectJ 代理模式。
- 数据库不⽀持事务
- 没有被spring管理
- 异常被吃掉,事务不会回滚(或者抛出的异常没有被定义,默认为RuntimeException)
第三题 什么是bean的⾃动装配,有哪些⽅式?
开启⾃动装配,只需要在xml配置⽂件中定义“autowire”属性
<bean id="cutomer" class="com.xxx.xxx.Customer" autowire="" />
autowire属性有五种装配的⽅式:
- no – 缺省情况下,⾃动配置是通过“ref”属性⼿动设定 。
⼿动装配:以value或ref的⽅式明确指定属性值都是⼿动装配。
需要通过‘ref’属性来连接bean。
- byName-根据bean的属性名称进⾏⾃动装配。
Cutomer的属性名称是person,Spring会将bean id为person的bean通过setter⽅法进⾏⾃动
装配。
<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="byName"/>
<bean id="person" class="com.xxx.xxx.Person"/>
- byType-根据bean的类型进⾏⾃动装配。
Cutomer的属性person的类型为Person,Spirng会将Person类型通过setter⽅法进⾏⾃动装
配。
<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="byType"/>
<bean id="person" class="com.xxx.xxx.Person"/>
- constructor-类似byType,不过是应⽤于构造器的参数。如果⼀个bean与构造器参数的类型形同,则进⾏⾃动装配,否则导致异常。
Cutomer构造函数的参数person的类型为Person,Spirng会将Person类型通过构造⽅法进⾏⾃动
装配。
<bean id="cutomer" class="com.xxx.xxx.Cutomer" autowire="construtor"/>
<bean id="person" class="com.xxx.xxx.Person"/>
- autodetect-如果有默认的构造器,则通过constructor⽅式进⾏⾃动装配,否则使⽤byType⽅式进⾏⾃动装配。
如果有默认的构造器,则通过constructor⽅式进⾏⾃动装配,否则使⽤byType⽅式进⾏⾃动装配。
@Autowired⾃动装配bean,可以在字段、setter⽅法、构造函数上使⽤。
第四题 Spring中的Bean创建的⽣命周期有哪些步骤?
Spring中⼀个Bean的创建⼤概分为以下⼏个步骤:
- 推断构造⽅法
- 实例化
- 填充属性,也就是依赖注⼊
- 处理Aware回调
- 初始化前,处理@PostConstruct注解
- 初始化,处理InitializingBean接⼝
- 初始化后,进⾏AOP
第五题 Spring中Bean是线程安全的吗?
Spring本身并没有针对Bean做线程安全的处理,所以:
- 如果Bean是⽆状态的,那么Bean则是线程安全的
- 如果Bean是有状态的,那么Bean则不是线程安全的
另外,Bean是不是线程安全,跟Bean的作⽤域没有关系,Bean的作⽤域只是表示Bean的⽣命周期范围,对于任何⽣命周期的Bean都是⼀个对象,这个对象是不是线程安全的,还是得看这个Bean对象本身。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力

相关文章:
每日五道java面试题之spring篇(二)
目录: 第一题 Spring事务传播机制第二题 Spring事务什么时候会失效?第三题 什么是bean的⾃动装配,有哪些⽅式?第四题 Spring中的Bean创建的⽣命周期有哪些步骤?第五题 Spring中Bean是线程安全的吗? 第一题 Spring事务…...
287.【华为OD机试真题】字符串序列判定(贪心算法—JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-字符串序列判定二.解题思路三.题解代码Python题…...
Sentinel微服务流量治理组件实战上
目录 分布式系统遇到的问题 解决方案 Sentinel 是什么? Sentinel 工作原理 Sentinel 功能和设计理念 流量控制 熔断降级 Sentinel工作主流程 Sentinel快速开始 Sentinel资源保护的方式 基于API实现 SentinelResource注解实现 Spring Cloud Alibaba整合…...
Three.js加载PLY文件
这是官方的例子 three.js webgl - PLY 我在Vue3中使用,测试了好久始终不显示点云数据。在网上查询后发现ply文件要放置在public目录下才行 <el-row><el-button type"primary" class"el-btn" click"IniThree1">PLY</…...
chrome闪退后打不开问题 打开立即闪退
今天刚遇到,大概率是某些网站引起的闪退,重启和清理也不能解决问题 网上到处都是答非所问,还有什么打开chrome再进行设置这种回答 在此解决下 注意该方法根据我测试,唯一会损失的是chrome扩展,可以提前去 C:\Users…...
Slave被误写入数据如何恢复到主库
背景 在GreatSQL主从复制环境中,有时候可能会出现一些误操作,将本应该写入到主库的数据写入到了从库,导致主从数据不一致,影响数据同步。是否可以将写入从库的数据同步写入主库呢? 测试环境 角色IP地址数据库开放端…...
kafka生产者
1.原理 2.普通异步发送 引入pom: <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency><dependency><g…...
前后端分离Vue+node.js在线学习考试系统gqw7o
与其它应用程序相比,在线学习平台的设计主要面向于学校,旨在为管理员和学生、教师、院系提供一个在线学习平台。学生、教师、院系可以通过系统及时查看公告信息等。 在线学习平台是在Windows操作系统下的应用平台。为防止出现兼容性及稳定性问题…...
关于el-select值的回显问题 : 框内显示label值还是value值
<el-form-item label"状态" prop""><el-selectv-model"roleForm.state"class"m-2"size"large"style"width: 240px"placeholder"请选择状态"value-key"value"//value-key 与下面的ke…...
MCU多核异构通信原理
摘要: 本文结合瑞萨RZ/G2L 多核处理器,给大家讲述一下多核异构设计及通信的原理。 随着电子技术的不断发展,以及市场需求的日益增长,嵌入式系统不仅要求执行复杂的控制任务,还需要实时地采集和处理数据。 为了满足这…...
在autodl搭建stable-diffusion-webui+sadTalker
本文介绍在autodl.com搭建gpu服务器,实现stable-diffusion-webuisadTalker功能,图片音频 可生成视频。 autodl租GPU 自己本地部署SD环境会遇到各种问题,网络问题(比如huggingface是无法访问),所以最好的方…...
【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)
背景需求 上学期的周安排里,每班每周的自主游戏会轮到多个不同的内容 因此在每周的自主游戏观察有2次记录,观察的项目可以写不一样的, 如一位老师写沙水游戏,另一位写表演游戏 本学期,中班的自主游戏全部是户外的&am…...
机器学习:SVM算法(Python)
一、核函数 kernel_func.py import numpy as npdef linear():"""线性核函数:return:"""def _linear(x_i, x_j):return np.dot(x_i, x_j)return _lineardef poly(degree3, coef01.0):"""多项式核函数:param degree: 阶次:param …...
基于yolov5的人脸口罩检测,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】
功能演示: 基于yolov5的人脸口罩检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架)_哔哩哔哩_bilibili (一)简介 基于yolov5的人脸口罩检测系统是在pytorch框架下实现的&#…...
2024如何恢复旧版的Chrome的主题样式
起因 chrome 更新版本之后的主题样式变成了浅紫色的页签卡样式,感觉很不习惯,也很不喜欢 如何换回旧版主题 通过主题商店,安装旧版本的主题 主题商店搜索下面,或着直接访问下面的地址 Chrome Original White Theme https://…...
【文生视频】Diffusion Transformer:OpenAI Sora 原理、Stable Diffusion 3 同源技术
文生视频 Diffusion Transformer:Sora 核心架构、Stable Diffusion 3 同源技术 提出背景输入输出生成流程变换器的引入Diffusion Transformer (DiT)架构Diffusion Transformer (DiT)总结 OpenAI Sora 设计思路阶段1: 数据准备和预处理阶段2: 架构设计阶段3: 输入数据…...
Redis 服务集群、哨兵、缓存及持久化的实现原理和应用场景
Redis 是一种高性能的键值存储系统,已经成为了许多企业和互联网公司的核心技术之一。本文将介绍 Redis 的服务集群、哨兵以及缓存实现原理和应用场景,以帮助读者更好地理解和使用 Redis。 引言: 随着互联网应用规模不断扩大,Redi…...
通过Redis增减库存避坑
问题: 先执行get获取值,判断符合条件再执行incr、decr操作。在临界缓存失效的情况下,会默认赋值当前key为永不过期的0,再执行加减法,导致程序异常。 推荐解决方案: 1、限制接口频率:先incr&…...
Windows系统搭建Elasticsearch引擎结合内网穿透实现远程连接查询数据
文章目录 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎,它提供了一个分布式、多…...
Java爬虫使用JSoup获取静态资源图片
import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.FileOutputStream;/*** 获取静态图片*/public class ImageDownloader {public static void main…...
VS Code本地代码评审扩展:结构化JSON存储与AI协同实践
1. 项目概述:一个纯粹本地的代码评审伴侣 如果你和我一样,日常重度依赖 VS Code,并且经常需要处理代码评审任务——无论是和同事异步协作,还是借助 AI 助手(如 Claude、GitHub Copilot、Cursor)来审查自己…...
WSL启动器openclaw-wsl-launcher:提升Windows与Linux开发效率的桥梁工具
1. 项目概述:一个为WSL设计的OpenClaw启动器如果你和我一样,日常开发的主力环境是Windows,但核心的编译、部署和测试工作又离不开Linux,那么Windows Subsystem for Linux(WSL)绝对是你绕不开的利器。它让我…...
ARM内存访问指令LDRB与LDREX详解及应用
1. ARM内存访问指令概述在嵌入式系统开发中,对内存的高效访问是保证程序性能的关键。ARM架构提供了丰富的内存访问指令集,其中LDRB和LDREX是两种具有代表性的指令。LDRB(Load Register Byte)用于从内存加载字节数据,而…...
Spring AI ChatMemory 对话记忆配置JDBC方式到Mysql数据库实战示例与原理讲解
场景 Spring AI ChatMemory 对话记忆配置指南:概念、实战与常见问题: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/161020514 上述示例对话记忆使用内存方式,如何使用JDBC方式将对话记忆到Mysql中。 之前我们使用的 InMe…...
金属表面缺陷智能检测新突破
篇名问题,背景方法结论金属表面缺陷自适应分割算法1.金属表面划痕 2.金属表面凹凸 3.金属表面污点 4.金属表面刮擦 5.金属表面裂纹2.1多方向灰度波动分析 2.2领域灰度差分割算法 2.3PCA法图像压缩本文算法与其他算法相比,具有通用性好、分割准确度高等优…...
温室大棚结构设计与选型指南:从荷载计算到智能控制系统
摘要 温室大棚作为现代农业的核心基础设施,其结构设计、材料选型及环境调控系统的合理性直接影响作物产量与运营成本。本文从工程技术角度出发,系统介绍日光温室、智能连栋温室、菌菇专用大棚等常见类型的技术特点、结构参数、荷载计算要点及智能控制系统…...
ARM7TDMI AHB Wrapper设计与时钟门控技术解析
1. ARM7TDMI AHB Wrapper架构概述在嵌入式处理器设计中,总线接口单元(BIU)作为处理器核与系统总线之间的桥梁,其设计质量直接影响整个系统的性能和可靠性。ARM7TDMI处理器采用的AHB Wrapper设计,通过精妙的时钟控制和状…...
079、多轴运动控制:插补器设计(圆弧插补)
079 多轴运动控制:插补器设计(圆弧插补) 从一次现场调试说起 去年在深圳某激光切割设备厂,客户反馈切割圆孔时总在四个象限点出现“鼓包”。我带着示波器去现场,抓出XY轴的位置误差曲线,发现每次经过0、90、180、270这些特殊角度时,速度曲线都会出现一个明显的尖峰。当…...
渗透测试之信息收集:这些技巧决定了渗透成败
渗透测试之信息收集:这些技巧决定了渗透成败作者:浅木先生前言 做渗透测试久了,你会越来越认同一个观点:信息收集的质量直接决定渗透测试的成败。 同样的目标URL,不同人扫出来的结果完全不同——有人只能扫出后台登录页…...
测试工程师的副业指南:利用专业技能实现月入过万
一、解锁测试工程师的副业潜力在软件行业高速发展的今天,测试工程师早已不再是仅仅围绕着“找bug”打转的角色。他们凭借着对软件质量把控的专业能力、对各类系统架构的深入理解以及严谨的逻辑思维,在副业领域拥有着得天独厚的优势。越来越多的测试工程师…...
