之前在学习到spring的事务的时候,一直不知道传播行为是什么意思。后来偶然的一次,看到有一位老师讲到了spring的事务的传播行为才恍然大悟。
首先spring帮我们来管理事务是通过aop的形式,这个也是aop要解决的核心问题之一。就是帮我们从重复的代码中解救出来,通常如果一个service如果加入了事务,那么在aop帮我们在进入service的这个方法之前呢就会为我们创建一个事务。首先来个问题.
service A{
@Autowired
private ServiceB serviceB
@Transaction
public void shopping(){
***;
serviceB.update()
}
}
Service B{
@Transaction
public void update(){
***;
}
}
例如上述代码会创建几个事务,这个就涉及到了spring事务的传播行为了。
因为spring默认@Transaction的传播行为是required,而这种传播行为根据源码可知,它在创建事务之前会进行判断,如果已经有事务了,它就会直接使用当前事务,而不会再创建新的事务,所以上述代码只会产生一个事务,所有的代码都是在一个事务之中。而如果要多个事务不产生影响,通常要将一个service中调用另一个service的代码进行try-catch这样的话两个事务之间就不会相互 影响了。当然了具体什么行为还要看配置的传播行为是什么。有待后续学习啦。