一文带你认识Spring事务

前言

Spring事务管理我相信大家都用得很多,但可能仅仅局限于一个@Transactional注解或者在XML中配置事务相关的东西。不管怎么说,日常可能足够我们去用了。但作为程序员,无论是为了面试还是说更好把控自己写的代码,还是应该得多多了解一下Spring事务的一些细节。

这里我抛出几个问题,看大家能不能瞬间答得上:

  • 如果嵌套调用含有事务的方法,在Spring事务管理中,这属于哪个知识点?
  • 我们使用的框架可能是Hibernate/JPA或者是Mybatis,都知道的底层是需要一个session/connection对象来帮我们执行操作的。要保证事务的完整性,我们需要多组数据库操作要使用同一个session/connection对象,而我们又知道Spring IOC所管理的对象默认都是单例的,这为啥我们在使用的时候不会引发线程安全问题呢?内部Spring到底干了什么?
  • 人家所说的BPP又是啥东西?
  • Spring事务管理重要接口有哪几个?

一、阅读本文需要的基础知识

阅读这篇文章的同学我默认大家都对Spring事务相关知识有一定的了解了。(ps:如果不了解点解具体的文章去阅读再回到这里来哦)

我们都知道,Spring事务是Spring AOP的最佳实践之一,所以说AOP入门基础知识(简单配置,使用)是需要先知道的。如果想更加全面了解AOP可以看这篇文章:AOP重要知识点(术语介绍、全面使用)。说到AOP就不能不说AOP底层原理:动态代理设计模式。到这里,对AOP已经有一个基础的认识了。于是我们就可以使用XML/注解方式来配置Spring事务管理。

在IOC学习中,可以知道的是Spring中Bean的生命周期(引出BPP对象)并且IOC所管理的对象默认都是单例的:单例设计模式,单例对象如果有"状态"(有成员变量),那么多线程访问这个单例对象,可能就造成线程不安全。那么何为线程安全?,解决线程安全有很多方式,但其中有一种:让每一个线程都拥有自己的一个变量:ThreadLocal

二、两个不靠谱直觉的例子

2.1第一个例子

之前朋友问了我一个例子:

在Service层抛出Exception,在Controller层捕获,那如果在Service中有异常,那会事务回滚吗?

// Service方法

@Transactional
public Employee addEmployee() throws Exception {

Employee employee = new Employee("3y", 23);
employeeRepository.save(employee);
// 假设这里出了Exception
int i = 1 / 0;

return employee;
}

// Controller调用
@RequestMapping("/add")
public Employee addEmployee() {
Employee employee = null;
try {
employee = employeeService.addEmployee();
} catch (Exception e) {
e.printStackTrace();
}
return employee;

}

<< · Back Index ·>>

发表回复

相关推荐

excel核对技巧:这么多数据对比的方法应该够用了

编按:核对数据或者说对比数据是Excel表妹表哥们常做的一件事。有人为此耽误了吃饭,有人为此被领导批,有人为此被男友埋怨 ...

· 3分钟前

乙肝化驗的報告單怎麼看?快速看懂乙肝五項

【導語】乙肝五項(也稱為“兩對半”)是臨床常見的化驗項目,目前已作為常規的體檢項目,在各種體檢中一般均包括此種項目,但...

· 5分钟前

大家看过动物的「露骨」照片吗?

大家看过动物的「露骨」照片吗? 别多想,说的是给动物做体检时拍的X光照片: 最近,美国俄勒冈动物园的常住居民们刚刚结束 ...

· 6分钟前

中華傳統文化之茶文化綠茶篇(浙江綠茶續三)

浙江綠茶 (江山綠牡丹) 烘青綠茶主要產地浙江省衢州市江山市保安鄉仙霞紮麓化龍溪兩側山地品質特征條索:緊結挺直...

· 7分钟前

2023年超全袋泡茶(茶包)選購指南,年輕人喝茶前看這篇就夠瞭!

長文預警!這是一片關於茶包品牌的分類集合幹貨知識!掃清你對袋泡茶品牌的一臉懵逼!看茶包測評的友友直接到最後1part哦~不...

· 8分钟前