【问题标题】:Spring transaction configurationSpring事务配置
【发布时间】:2011-10-08 12:20:59
【问题描述】:

通过xml配置Spring事务时,是绑定接口好还是具体好 交易类?我在想我们应该映射接口 事务处理,但我从 Spring 文档中找到了这个: “Spring 团队的建议是你只用 @Transactional 注释”。

请分享你的想法。

【问题讨论】:

    标签: java spring interface transactions annotations


    【解决方案1】:

    事务边界是实现细节,因此它们应该由实现而不是接口来指定。

    例如,假设在某些复杂情况下,您需要使用程序化事务管理 (TransactionTemplate) 而不是 @Transactional 作为您的一种方法。如果您在接口级别有@Transactional,那将是不可能的。

    【讨论】:

    • 对不起,我在我的问题中进入了@Transactional。实际上那是我从 Spring 文档中提取的一部分。我的问题是关于通过 xml 声明事务。这样,我应该绑定接口还是实现类?
    • @user495939:这种推理也适用于 xml。
    【解决方案2】:

    接口是合约。交易性(通常)不是合同的一部分。这是一个实现细节。因此@Transactional 属于实现类,而不是接口。

    【讨论】:

    • 假设我们不使用注释,只通过 xml 声明事务。在这种情况下,我们可以同时拥有接口和类代理,对吧?哪一个更好?那是我的担心。
    • @user495939:正如 axtavt 所说,同样的推理可以应用于 XML 声明的事务。你有 bean 和类型,而不是类和接口。您可以认为适用的规则大致相同。
    【解决方案3】:

    @Transactional 注释不是从接口继承的,所以如果您使用不同的代理方法(例如 proxy-target-class=trueaspectj )你的真实方法不会是事务性的。

    参见 proxy-aop(用于标准事务注释) http://static.springsource.org/spring/docs/3.0.x/reference/aop.html#aop-understanding-aop-proxies

    【讨论】:

      猜你喜欢
      • 2016-08-20
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2015-06-02
      • 2017-07-30
      • 1970-01-01
      • 2010-10-18
      相关资源
      最近更新 更多