gpt4 book ai didi

grails - Grails @Transactional 与 Spring @Transactional 注释之间的差异

转载 作者:行者123 更新时间:2023-12-03 14:30:21 25 4
gpt4 key购买 nike

好吧,Grails 中有一个观点 Declarative Transactions .它说:

The grails.transaction.Transactional annotation was first introduced in Grails 2.3. Prior to 2.3, Spring's @Transactional annotation was used.



但我似乎无法找出这两个注释之间的主要区别是什么。为什么在 future 的版本中没有使用 Spring 的注解?

最佳答案

我想解决这个评论“但是,在 2.3 中,团队认为引入一个新的注释是一个好主意(我个人不同意),该注释不仅可以应用于服务,还可以应用于 Controller 。”

Grails 团队的主要意图从来都不是引入一个可以在 Controller 和服务上使用的注释。我们的主要目的是引入一个 AST 转换,它消除了对代理的需求,并且比 Spring 的 @Transactional 性能更好。 Grails 的 @Transactional 将处理事务的必要逻辑直接连接到字节码中,并且不需要代理,因此我们认为它比 Spring 的版本更好。

它也适用于 Controller 的事实只是我们发现的上述结果的副作用。话虽如此,根据我们的经验,太多 Grails 用户在使用 Controller 时没有正确划分他们的事务边界。如果您将 Controller 操作标记为只读,则 Hibernate 不需要对您在该操作范围内执行的任何查询执行脏检查。这极大地提高了 Grails 应用程序的性能,并且是一件非常好的事情。

我们绝对鼓励将逻辑分离为服务,但如果您考虑以下简单示例:

  @Transactional(readOnly=true)
def show(Long id) {
respond Foo.get(id)
}

为这样一个微不足道的操作引入服务是多余的,但是如果您不使用只读事务划分查询,那么 Hibernate 会对实例执行脏检查,这会损害性能。

22/02/16 更新:从 Grails 3.1 开始,Spring 版本被认为已弃用并默认禁用(如果需要,您仍然可以重新启用)

关于grails - Grails @Transactional 与 Spring @Transactional 注释之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23627215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com