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