此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

声明式事务管理

大多数 Spring Framework 用户选择声明式事务管理。此选项具有 对应用程序代码的影响最小,因此最符合 非侵入式轻质容器。

Spring 框架的声明式事务管理可以通过 Spring 实现 面向方面的编程 (AOP)。但是,随着事务方面代码的出现 与 Spring Framework 发行版一起使用,并且可以以样板方式使用 AOP 通常不必理解概念即可有效使用此代码。spring-doc.cadn.net.cn

Spring 框架的声明式事务管理类似于 EJB CMT,因为它 您可以将事务行为(或缺乏事务行为)指定到单个方法级别。 您可以制作一个setRollbackOnly()调用,如果 必要。两种类型的事务管理之间的区别是:spring-doc.cadn.net.cn

  • 与与 JTA 绑定的 EJB CMT 不同,Spring Framework 的声明式事务 管理层在任何环境中工作。它可以处理 JTA 事务或本地 事务,通过调整配置来使用 JDBC、JPA 或 Hibernate 文件。spring-doc.cadn.net.cn

  • 您可以将 Spring Framework 声明式事务管理应用于任何类, 不仅仅是特殊类,例如 EJB。spring-doc.cadn.net.cn

  • Spring Framework 提供了声明式回滚规则,该功能没有 EJB 等效。提供了对回滚规则的编程和声明性支持。spring-doc.cadn.net.cn

  • Spring 框架允许您使用 AOP 自定义事务行为。 例如,您可以在事务回滚的情况下插入自定义行为。你 还可以添加任意建议以及交易建议。使用 EJB CMT,您可以 不能影响容器的事务管理,除非setRollbackOnly().spring-doc.cadn.net.cn

  • Spring Framework 不支持跨 远程调用,就像高端应用程序服务器所做的那样。如果您需要此功能,我们 建议使用 EJB。但是,在使用此类功能之前请仔细考虑, 因为,通常情况下,人们不希望事务跨越远程调用。spring-doc.cadn.net.cn

回滚规则的概念很重要。它们允许您指定哪些异常 (和投掷物)应该会导致自动回滚。您可以在 配置,而不是在 Java 代码中。所以,虽然你仍然可以调用setRollbackOnly()上 这TransactionStatusobject 回滚当前事务,最常见的是你 可以指定一个规则,该规则MyApplicationException必须始终导致回滚。这 此选项的显着优点是业务对象不依赖于 交易基础设施。例如,它们通常不需要导入 Spring transaction API 或其他 Spring API。spring-doc.cadn.net.cn

尽管 EJB 容器缺省行为会自动回滚 系统异常(通常是运行时异常),EJB CMT 不会回滚 应用程序异常(即检查异常 以外java.rmi.RemoteException).虽然 Spring 的默认行为 声明式事务管理遵循 EJB 约定(回滚仅自动 在未检查的异常上),自定义此行为通常很有用。spring-doc.cadn.net.cn