此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
声明式事务管理
大多数 Spring Framework 用户选择声明式事务管理。此选项具有 对应用程序代码的影响最小,因此最符合 非侵入式轻质容器。 |
Spring 框架的声明式事务管理可以通过 Spring 实现 面向方面的编程 (AOP)。但是,随着事务方面代码的出现 与 Spring Framework 发行版一起使用,并且可以以样板方式使用 AOP 通常不必理解概念即可有效使用此代码。
Spring 框架的声明式事务管理类似于 EJB CMT,因为它
您可以将事务行为(或缺乏事务行为)指定到单个方法级别。
您可以制作一个setRollbackOnly()
调用,如果
必要。两种类型的事务管理之间的区别是:
-
与与 JTA 绑定的 EJB CMT 不同,Spring Framework 的声明式事务 管理层在任何环境中工作。它可以处理 JTA 事务或本地 事务,通过调整配置来使用 JDBC、JPA 或 Hibernate 文件。
-
您可以将 Spring Framework 声明式事务管理应用于任何类, 不仅仅是特殊类,例如 EJB。
-
Spring Framework 提供了声明式回滚规则,该功能没有 EJB 等效。提供了对回滚规则的编程和声明性支持。
-
Spring 框架允许您使用 AOP 自定义事务行为。 例如,您可以在事务回滚的情况下插入自定义行为。你 还可以添加任意建议以及交易建议。使用 EJB CMT,您可以 不能影响容器的事务管理,除非
setRollbackOnly()
. -
Spring Framework 不支持跨 远程调用,就像高端应用程序服务器所做的那样。如果您需要此功能,我们 建议使用 EJB。但是,在使用此类功能之前请仔细考虑, 因为,通常情况下,人们不希望事务跨越远程调用。
回滚规则的概念很重要。它们允许您指定哪些异常
(和投掷物)应该会导致自动回滚。您可以在
配置,而不是在 Java 代码中。所以,虽然你仍然可以调用setRollbackOnly()
上
这TransactionStatus
object 回滚当前事务,最常见的是你
可以指定一个规则,该规则MyApplicationException
必须始终导致回滚。这
此选项的显着优点是业务对象不依赖于
交易基础设施。例如,它们通常不需要导入 Spring
transaction API 或其他 Spring API。
尽管 EJB 容器缺省行为会自动回滚
系统异常(通常是运行时异常),EJB CMT 不会回滚
应用程序异常(即检查异常
以外java.rmi.RemoteException
).虽然 Spring 的默认行为
声明式事务管理遵循 EJB 约定(回滚仅自动
在未检查的异常上),自定义此行为通常很有用。