事务隔离级别
Spring提供了五种隔离级别:
DEFAULT
(默认):意思就是数据库用啥我用啥SERIALIZABLE
(串行化):事务之间以一种串行的方式执行REPEATABLE READ
(可重复读):是MySQL默认的隔离级别,同一个事务中相同的查询会看到同样的数据行READ COMMITED
(读已提交):一个事务可以读到另一个事务已经提交的数据READ UNCOMMITED
(读未提交):一个事务可以读到另一个事务未提交的数据
除了第一个是Spring新增的,其余的四个都是和「数据库的事务隔离级别」一一对应。
事务传播机制
事务传播机制是指在一个可能含有事务的方法中,调用了另一个可能含有事务的方法,这两个事务应该如何去取舍。最常见的场景就是在Service层。比如OrderService#createOrder()
方法里调用了StockService#decreaseStock()
,而这两个方法明显都是有事务的。这时,两个事务如何相互影响就是事务传播机制。
Spring提供了七种事务传播机制:
REQUIRED
:Spring「默认值」,如果存在事务,则加入当前事务;如果没有事务,则开启一个新的事务。REQUIRES_NEW
:如果当前存在事务,把当前事务挂起,新建事务。SUPPORTS
:支持当前事务,如果当前没有事务,就以非事务方式执行。NOT_SUPPORTED
:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。MANDATORY
:如果当前存在事务,则加入当前事务;如果没有事务,就抛出异常。NEVER
:以非事务方式执行,如果当前存在事务,则抛出异常。NESTED
:支持当前事务,新增Savepoint,与当前事务同步提交或回滚。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。
生命周期
Spring管理了对象的生命周期,所以有必要了解Spring到底是怎么管理bean的生命周期的。如果我们想要在bean生命周期的某个时刻执行特定的功能应该怎么办?
Spring bean的生命周期颇为复杂,以下是整个过程,参考org.springframework.beans.factory.BeanFactory
=>构造方法->调用BeanNameAware的setBeanName方法->调用BeanFactoryAware的setBeanFactory方法->调用ApplicationContextAware的setApplicationContext方法->调用BeanPostProcessor的postProcessBeforeInitialization方法->调用initializingBean的afterProprtiesSet方法->调用init-method指定的初始化方法->调用BeanPostProcessor的postProccessAfterInitialization方法->是用->调用DisableBean的destory方法->调用destory-method指定的销毁方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现