【问题标题】:Spring AOP vs @Transactional annotationSpring AOP 与 @Transactional 注释
【发布时间】:2013-09-24 04:11:28
【问题描述】:

我想使用 Spring 的事务管理功能来实现事务。但我不确定哪个更好(AOP vs @Transactional)。这两个功能是否正常工作?开发效率有区别吗?


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


(添加) 我想知道 annotation-config 和基于 XML 的配置的区别

【问题讨论】:

  • 你的问题对我来说毫无意义。 @Transactional 注解使用 Spring AOP 实现事务管理。你能澄清你的问题吗?
  • 这里AOP的意思是“使用AspectJ而不显式使用@Transactional注解”
  • 为什么需要将 AOP(面向切面编程)与注解 @Transactional 进行比较?
  • 使用你自己的方面而不是弹簧提供的方面来做同样的工作就像重新发明轮子一样
  • 我假设,firia2000 想知道什么对事务管理更好:注解配置或基于 XML 的配置。我说的对吗?

标签: spring spring-transactions


【解决方案1】:

我自己也想过这个问题。我在Spring forum 上找到了关于这个主题的很好的讨论。

下面我总结了我对上述链接的看法:

AOP 事务划分

好处:

  • Java 代码没有事务配置,而是包含在配置文件中的代码之外
  • Java 代码没有直接依赖于 Spring 库
  • 事务管理集中在一个地方
  • 可以将事务边界应用于您无法轻易修改的源代码

缺点:

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

@TransactionalSpring注解

好处:

  • 检查源代码时更清楚地了解事务边界

缺点:

  • Java 代码与事务声明相结合(尽管仅在元数据级别,但仍需要 Spring 导入)。

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

也就是说,我参与的项目是我们使用 Spring 的 AOP 配置来注释 Struts2 (webwork) 拦截器以允许每个请求执行单个事务,结果非常好。在这种情况下,我们并不真正担心我们的服务层或其他地方的事务边界——一切都已经参与到事务中,并且由于在拦截器关闭事务之前呈现的视图,因此无需应用OpenSession/EntityManagerInView解决方案。

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 2012-05-19
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2023-03-15
    相关资源
    最近更新 更多