java - Spring:注解驱动的事务管理器

标签 java spring transactions

我正在建立一个新的 JPA+Spring 项目。有什么区别(对我作为程序员来说):

<tx:annotation-driven transaction-manager="transactionManager" />

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />

在我的 applicationContext.xml 中?

最佳答案

代理和字节码编织方面之间存在巨大差异。 代理只能在调用来自“外层空间”时拦截,但如果调用来自对象本身(this.transactionalMethod())则不能拦截

这意味着如果你有一个有两个方法的类,T 和 B。方法 T 有一个事务注解,方法 B 调用 T 通过“this.T()”,那么代理永远不会被调用(对于T)所以在这种情况下没有事务处理!

如果你使用AspectJ,事务处理代码被编织在T的字节码中,不管调用是来自对象本身还是来自其他对象,它都会被执行。

关于java - Spring:注解驱动的事务管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4155991/

相关文章:

java - 我可以向单个属性添加多个字段吗

java - 需要通用方法来读取 csv 文件

sql - 围绕单个语句的事务有什么作用?

MySQL 在创建表失败时会提交事务

java - 在没有aspectj的情况下,使用cglib或jdk代理的spring aop哪个是高性能的?

Java 多线程和添加静态字段

spring - 刷新 Spring Boot 自动配置的属性

java - 在独立的 Tomcat 服务器上部署 Java Spring、REST 和 Angular JS 应用程序

postgresql - Postgres 的可序列化事务阻塞并发写

java - 提高应用程序性能的方法