春季的交易注释 - 它是如何运作的?

时间:2016-12-06 17:12:28

标签: java spring transactions spring-mybatis

让我们考虑一下:

IabAsyncInProgressException

正如您只能看到 delete() update() insert() @Transactional void doDBstuff(){ delete() update() insert } 。它调用其他方法(doDBstuff)。所有这些都使用delete, update, insert来处理数据库。

请告诉我,如果此mybatis注释应该有效。我手动测试它似乎没问题,但我想确定并更好地理解它是如何工作的。

所以我要求答案:
1.交易安全吗?
2.它是如何在发动机下工作的?我知道这很复杂。我的意思是只有一些直觉,对主题的粗略观点。

1 个答案:

答案 0 :(得分:4)

@Transactional就像Spring中的大多数其他魔法,代理(或者不是,如果你使用的是AspectJ)。如果您注入一个具有任何@Transactional注释的bean,Spring Framework会自动连接一个代理,以确保对注释请求的事务中的@Transactional方法的任何调用都被包装(如果抛出异常,则回滚)。

关于您的代码是否实际在某个事务中运行取决于。如果您正在使用AspectJ,那么它将按预期在事务中运行,故事结束。如果你没有使用AspectJ,Spring必须创建一个代理,那么它可以在你自己的类的自动装配bean上调用它 - 但是如果你试图在你手动构建的实例上或在类本身内调用它无声地无法在交易中运行。