事务隔离级别
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指定的销毁方法
浙公网安备 33010602011771号