我想使用 Spring 的事务管理功能来实现事务。但我不确定哪个更好(AOP vs @Transactional)。这两个功能是否正常工作?开发效率有区别吗?
(添加)这里 AOP 的意思是“使用 AspectJ 而不显式使用 @Transactional 注释”
(已添加)我想知道 annotation-config 和基于 XML 的配置的区别
我想使用 Spring 的事务管理功能来实现事务。但我不确定哪个更好(AOP vs @Transactional)。这两个功能是否正常工作?开发效率有区别吗?
(添加)这里 AOP 的意思是“使用 AspectJ 而不显式使用 @Transactional 注释”
(已添加)我想知道 annotation-config 和基于 XML 的配置的区别
我自己也想过这个。我在Spring 论坛上找到了关于这个主题的一个很好的讨论。
下面我总结了我对上述链接的看法:
好处:
缺点:
@Transactional
弹簧注解好处:
缺点:
讨论让我想起了 JPA 注释与 JPA XML 配置。使用基于 XML 的 JPA 配置,实体更“干净”,但分离是否值得?或者甚至,分离是否有害(能够打开一个java源文件并根据@Entity注释立即知道该类是一个EJB,这很好)?实际上,在我看来,大多数开发人员都选择使用 JPA 注释。尽管在这种情况下与 不同@Transactional
,jpa 注释是一个标准,因此可能有助于缓解一些问题。
也就是说,我参与的项目是我们使用 Spring 的 AOP 配置来注释 Struts2 (webwork) 拦截器以允许每个请求执行单个事务,并且效果很好。在这种情况下,我们并不真正担心服务层或其他地方的事务边界——一切都已经参与到事务中,并且由于在拦截器关闭事务之前呈现的视图,因此无需应用OpenSession/EntityManagerInView
解决方案。