【问题标题】:Declarative or Programmatic Transaction in SpringSpring 中的声明式或程序化事务
【发布时间】:2012-06-27 08:22:50
【问题描述】:

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

还想知道spring写数据库代码的时候最新的东西是什么? HibernateTemplate 的替代方案是什么?

【问题讨论】:

    标签: spring


    【解决方案1】:

    程序化交易管理

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

    声明式事务管理

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

    【讨论】:

    • 很好的答案。如果我在 AOP 的帮助下维护事务,它是声明性的还是程序性的?
    • @GovindaSakare Spring 框架的声明式事务管理是通过 Spring AOP 实现的。请访问this official doc for more details.
    【解决方案2】:

    它们并不相互排斥。

    在大多数情况下,您可以使用 decalrative 事务管理 (@Transactional),当您遇到 Spring AOP 的限制(请参阅 11.5.1 Understanding the Spring Framework's declarative transaction implementation)或需要在更复杂的方法。

    【讨论】:

    • 你真的将这两者混合在一个项目中吗?
    • 是的。简单情况下的声明式事务,复杂情况下的TransactionTemplates(例如在异步代码中)。
    【解决方案3】:

    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

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      仅当您有少量事务操作时,程序化事务管理通常是一个好主意。例如,如果您的 Web 应用程序只需要某些更新操作的事务,您可能不想使用 Spring 或任何其他技术设置事务代理。在这种情况下,使用 TransactionTemplate 可能是一个好方法。能够显式设置事务名称也只能使用事务管理的编程方法来完成。

      另一方面,如果您的应用程序有大量事务操作,则声明式事务管理通常是值得的。它将事务管理排除在业务逻辑之外,并且不难配置。

      【讨论】:

        【解决方案6】:

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

        1.程序化事务管理: 事务在编程的帮助下进行管理,提供了极大的灵活性,但难以维护。

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

        【讨论】:

          猜你喜欢
          • 2015-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-19
          相关资源
          最近更新 更多