【发布时间】:2021-12-23 19:31:30
【问题描述】:
使用 @Transactional 注释方法时究竟会发生什么?仅当方法包含数据库操作时才调用@Transactional,并且需要创建代理
我在采访中多次被问到这个问题,但在阅读各种博客的答案时没有得到任何澄清。
【问题讨论】:
标签: java spring transactions
使用 @Transactional 注释方法时究竟会发生什么?仅当方法包含数据库操作时才调用@Transactional,并且需要创建代理
我在采访中多次被问到这个问题,但在阅读各种博客的答案时没有得到任何澄清。
【问题讨论】:
标签: java spring transactions
Transactional annotation 向 Spring 发出信号,以在创建的 bean 周围创建代理。 Spring 在底层使用 AOP 将与事务相关的活动委托给底层的 TransactionManager。无论您是否在方法中实际使用 DB 访问,都将调用 AOP 代码。 话虽如此,事务方法有issues regarding self-invocation,但这是Spring Syle AOP的缺点。
我建议您看一下 Spring 代理,在哪些情况下代理 bean 以及何时不代理,并大致了解 AOP,因为它在 Spring 的底层被大量使用。
【讨论】:
@Transactional- 在类中声明此注解时 级别,它默认应用于声明类的所有方法 及其子类。请注意,它不适用于祖先类 类层次结构;继承的方法需要在本地重新声明 为了参与子类级别的注释。有关详细信息 方法可见性约束,请参阅事务管理 参考手册部分。
见
【讨论】: