|
对于最新的稳定版本,请使用 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()上
这TransactionStatusobject 回滚当前事务,最常见的是你
可以指定一个规则,该规则MyApplicationException必须始终导致回滚。这
此选项的显着优点是业务对象不依赖于
交易基础设施。例如,它们通常不需要导入 Spring
transaction API 或其他 Spring API。
尽管 EJB 容器缺省行为会自动回滚
系统异常(通常是运行时异常),EJB CMT 不会回滚
应用程序异常(即检查异常
以外java.rmi.RemoteException).虽然 Spring 的默认行为
声明式事务管理遵循 EJB 约定(回滚仅自动
在未检查的异常上),自定义此行为通常很有用。