1.spring事务的实现方式和实现原理?

spring事务的实现方式有两种:
1、编程式,beginTransaction()、commit()、rollback()等事务管理相关的方法。
2、声明式,利用注解Transactional 或者aop配置。
实现原理:
spring事务的本质其实就是数据库对事务的支持,通过创建事务管理器,并在配置类中开启事务,定义一个实现事物的类来实现事务的功能。

2.spring的通知类有哪些,分别在什么时候执行?

有五种:
前置通知 @Beform
后置通知 @AfterReturning
异常通知 @AfterThrowing
最终通知 @After
环绕通知 @Around

3.spring的事务传播行为;

image.png
spring事务的传播行为说的是,.当有多个事务同时存在的时候,spring如何处理这些事务的行为。

在事务传播行为类中,可以通过propagation关键字来更改事物的传播属性得到不一样的事务协调员功能,默认使用的是REQUIRED,常用的是REQUIRES_NEW,还有SUPPORTS
image.png

4.spring的隔离级别;

事务的特性有四种:原子性,一致性,隔离性,持久性,隔离级别是在事务的隔离性的知识点上的区分
隔离级别有四种:
读未提交 read_uncommitted 事务A读取了事务B尚未提交的数据,如果事务B回滚,则事务A读取的是不准确的信息,存在安全性的问题。
读已提交 read_committed 一个事务要等另一个事务提交后才能读取数据,会产生不可重复度,简单来讲就是一个A事务多次查询却返回不同的结果,这是由于查询间隔期间,A事务的数据被B事务修改并提交导致了数据的变化。
可重复读 repeatable_read 开始读取数据时,不再允许修改操作,但是可能会产生幻读,简单来讲就是事务A多次读取过程中,事务B对数据进行了新的增删操作,导致事务A多次读取的数据不一致。
最高级别的隔离 serializable 最高的事务隔离级别,可以避免脏读,不可重复读与幻读的问题,但是这种事务隔离级别效率低,比较消耗数据库的性能,一般不适用。

default是spring默认的隔离级别,使用数据库默认的隔离级别,比如使用的是mysql数据库,而mysql数据库默认用的是repeatable_read(可重复读),所以spring默认使用的隔离级别也是repeatable_read(可重复读)