我正在建立一个新的 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/