首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring与@Transactional注释

问Spring与@Transactional注释
EN

Stack Overflow用户
提问于 2013-08-30 08:59:09
回答 1查看 5K关注 0票数 3

我想使用Spring的事务管理特性来实现事务。但我不确定哪一个更好(AOP vs @Transactional)。这两个特性都正常工作吗?发展效率有什么不同吗?

(添加)这里AOP的意思是“使用AspectJ而不显式地使用@Transactional注释”

(补充)我想知道注释-config和基于XML的配置的区别。

EN

回答 1

Stack Overflow用户

发布于 2013-09-23 20:11:28

我自己也很好奇。我在春季论坛上找到了一个关于这个主题的很好的讨论。

下面我总结一下我从上述链接中获得的信息:

AOP交易分界

好处:

  • Java代码没有事务配置,而事务配置包含在配置文件中的代码之外。
  • Java代码对Spring库没有直接依赖关系
  • 事务管理集中在一个地方。
  • 可以将事务边界应用到源代码中,您很难修改

缺点:

  • AOP复杂性仅从代码中还不清楚事务性边界在哪里,开发人员可能无意中通过修改应用切入点的方法签名来破坏事务。
  • 需要触摸两个位置(源代码和AOP配置)才能应用事务边界

@Transactional弹簧注释

好处:

  • 在检查源代码时,可以更清楚地理解事务性边界。

缺点:

  • Java代码与事务声明耦合在一起(尽管只是在元数据级别,但仍然需要Spring导入)。

讨论让我想起了JPA注释与JPA配置。使用基于XML的JPA配置,实体“更干净”,但这种分离值得吗?或者甚至,分离是否有害(能够打开java源文件并根据@Entity注释立即知道类是EJB)是件好事?实际上,在我看来,大多数开发人员选择使用JPA注释。不过,在这种情况下,与@Transactional不同,jpa注释是一个标准,因此可能有助于缓解一些担忧。

尽管如此,我也参与了一些项目,比如我们使用了Spring的AOP配置来注释Struts2 (webwork)拦截器,从而允许每个请求只进行一个事务,这非常有效。在这种情况下,我们并不真正担心服务层或其他地方的事务边界--所有东西都已经参与了事务,而且由于在拦截器关闭事务之前呈现的视图没有必要应用OpenSession/EntityManagerInView解决方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18528876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档