Spring中的声明性或程序化事务

时间:2012-06-27 08:22:51

标签: spring

我们应该在Spring使用什么类型的事务管理策略? 声明性还是程序化? 哪个更好,在什么情况下应该使用它? 你能给出任何适当的例子或教程吗?

还想知道在Spring编写数据库代码时应该使用的最新内容是什么? HibernateTemplate的替代方案是什么?

6 个答案:

答案 0 :(得分:11)

程序化交易管理

  1. 允许我们通过源代码编程来管理交易。
  2. 这意味着我们的业务逻辑之间的硬编码事务逻辑。
  3. 我们使用编程来管理交易
  4. 灵活,但难以维护大量的业务逻辑。在业务逻辑之间引入样板。
  5. 在引入相对较少的交易逻辑时首选。
  6. 声明式交易管理

    1. 允许我们通过配置管理交易。
    2. 这意味着事务逻辑与业务逻辑分离。
    3. 我们使用注释(或XML文件)来管理交易。
    4. 易于维护。 Boilerplate远离业务逻辑。
    5. 使用大量事务逻辑时首选。

答案 1 :(得分:6)

Spring提供程序化和声明式事务。

程序化意味着您拥有围绕业务代码的事务管理代码。 这提供了极大的灵活性,但难以维护,并且很好,是样板。

声明表示您将事务管理与业务代码分开。 您可以使用注释或基于XML的配置。

programmatic management is more flexible during development time but less flexible during application life
declarative management is less flexible during development time but more flexible during application life

http://docs.spring.io/spring/docs/3.0.x/reference/transaction.html

声明式事务管理允许从Java代码中消除对事务框架的任何依赖性。提供事务支持的四个参与者是事务管理器,代理工厂,事务拦截器和一组事务属性。

建议使用声明式事务管理,替代HibernateTemplates NamedJDBCTemplate或simpleJDBCTemplate

答案 2 :(得分:5)

它们不是相互排斥的。

您可以在大多数情况下使用decalrative事务管理(@Transactional),并在遇到Spring AOP的限制时回退到程序化事务管理(TransactionTemplate)(请参阅11.5.1 Understanding the Spring Framework's declarative transaction implementation)或者需要以更复杂的方式控制交易。

答案 3 :(得分:4)

答案 4 :(得分:1)

只有当您的交易操作数量时,程序交易管理通常是一个好主意。例如,如果您的Web应用程序仅要求对某些更新操作进行事务处理,则可能不希望使用Spring或任何其他技术来设置事务代理。在这种情况下,使用TransactionTemplate可能是一个好方法。能够显式设置事务名称也是只能使用编程方法进行事务管理的功能。

另一方面,如果您的应用程序具有许多事务操作,则声明式事务管理通常是值得的。它使事务管理脱离业务逻辑,而且配置起来也不难。

答案 5 :(得分:-1)

Spring支持两种类型的事务管理:

<强> 1。程序化事务管理:在编程的帮助下管理事务并提供极大的灵活性,但很难维护。

<强> 2。声明式事务管理:事务管理与业务代码分离,仅使用注释或基于XML的配置来管理事务。