对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cn

声明式事务管理

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

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

Spring 框架的声明式事务 Management 类似于 EJB CMT,因为 您可以指定事务行为(或缺少事务行为),直到单个方法级别。 您可以在事务上下文中进行调用,如果 必要。两种类型的事务管理之间的区别是:setRollbackOnly()spring-doc.cn

  • 与与 JTA 绑定的 EJB CMT 不同,Spring 框架的声明式事务 管理适用于任何环境。它可以与 JTA 事务或本地 使用 JDBC、JPA 或 Hibernate 的事务,通过调整配置 文件。spring-doc.cn

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

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

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

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

回滚规则的概念很重要。它们允许您指定哪些例外 (和 throwables)应该会导致自动回滚。您可以在 配置,而不是在 Java 代码中。所以,虽然你仍然可以调用 用于回滚当前事务的对象,最常见的是 可以指定必须始终导致回滚的规则。这 此选项的显著优点是 Business Objects 不依赖于 交易基础设施。例如,他们通常不需要导入 Spring 事务 API 或其他 Spring API 的 API 进行处理。setRollbackOnly()TransactionStatusMyApplicationExceptionspring-doc.cn

尽管 EJB 容器默认行为会自动回滚 系统异常(通常是运行时异常),则 EJB CMT 不会回滚 transaction 在应用程序异常(即已检查的异常 除 ) 之外。虽然 Spring 的默认行为 声明式事务管理遵循 EJB 约定(回滚仅是自动的 on unchecked exceptions),自定义此行为通常很有用。java.rmi.RemoteExceptionspring-doc.cn