gpt4 book ai didi

java - spring 中的事务注解——它是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 08:40:02 25 4
gpt4 key购买 nike

让我们考虑一下:

    delete()
update()
insert()
@Transactional
void doDBstuff(){
delete()
update()
insert
}

如您所见,只有 doDBstuff。它调用其他方法(删除、更新、插入)。他们都使用 mybatis 来处理数据库。

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

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

最佳答案

@Transactional 的工作方式与 Spring 中的大多数其他魔法一样,代理(或者不使用,如果您使用的是 AspectJ)。如果您注入(inject)一个具有任何 @Transactional 注释的 bean,Spring Framework 会自动连接一个代理,以确保对 @Transactional 方法的任何调用都按照注释的请求包装在事务中(并在抛出异常时回滚)。

至于您的代码是否会实际在事务中运行取决于。如果您使用的是 AspectJ,那么是的,它将按预期在事务中运行,故事结束。如果您不使用 AspectJ 并且 Spring 必须创建一个代理,那么它将在您的类的 Autowiring bean 上调用它的任何地方工作 - 但是如果您尝试在您手动构造的实例上调用它或从类本身内部调用它静默地无法在事务中运行。

关于java - spring 中的事务注解——它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41001086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com