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

Spring 框架的声明式事务管理通过 Spring 成为可能 面向方面的编程 (AOP)。但是,随着事务方面代码的到来 与 Spring Framework 发行版一起使用,可以以样板方式使用 AOP 通常不必理解概念即可有效使用此代码。

Spring 框架的声明式事务管理类似于 EJB CMT,因为 您可以指定事务行为(或没有事务行为)到单个方法级别。 如果满足以下条件,则可以在事务上下文中进行调用 必要。这两种类型的事务管理之间的区别在于:setRollbackOnly()

  • 与 EJB CMT 不同,它与 JTA 绑定,Spring Framework 的声明式事务 管理适用于任何环境。它可以与 JTA 事务或本地事务一起使用 通过调整配置,使用 JDBC、JPA 或 Hibernate 进行事务处理 文件。

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

  • Spring Framework 提供了声明性回滚规则,这是一项没有 EJB 的功能 等效。提供了对回滚规则的编程和声明性支持。

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

  • Spring 框架不支持跨 远程调用,就像高端应用程序服务器一样。如果您需要此功能,我们 建议您使用 EJB。但是,在使用此类功能之前,请仔细考虑, 因为,通常,人们不希望事务跨越远程调用。

回滚规则的概念很重要。它们允许您指定哪些例外 (和可投掷物)应导致自动回滚。您可以在 配置,而不是在 Java 代码中。所以,虽然你仍然可以打电话 回滚当前事务的对象,最常见的是你 可以指定必须始终导致回滚的规则。这 此选项的显著优点是业务对象不依赖于 事务基础设施。例如,它们通常不需要导入 Spring 事务 API 或其他 Spring API。setRollbackOnly()TransactionStatusMyApplicationException

尽管 EJB 容器缺省行为会自动回滚事务 系统异常(通常是运行时异常),EJB CMT 不会回滚 在应用程序异常(即已检查的异常)上自动处理事务 除了 )。而 Spring 的默认行为 声明式事务管理遵循 EJB 约定(仅自动回滚 在未经检查的异常中),自定义此行为通常很有用。java.rmi.RemoteException