更改注入服务的名称会改变事务的行为吗?

时间:2013-06-10 08:20:36

标签: grails

我正在使用Grails 1.3.7,我有两个服务,我在AService中调用BService的方法如下:

BService {
  static boolean transactional = true

  public void bDoThings() {
    //doThings
    b.save()
  }
}

AService {

  static boolean transactional = true

  BService bProxy

  public void aDoThings() {
    //doSomethings
    bProxy.bDoThings()
    //doSomeOtherThings
    throw new RuntimeException()
  }
}

我认为在抛出RuntimeException之后,将回滚aDoThings,并且不会保存b。但只有aDotThings回滚,b仍然存在。

但是当我改变时

BService bProxy

BService bService

def bService

一切正常。所以我想知道为什么会这样,因为我认为bProxy只是一个变量名,它不应该影响事务的行为。 任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:0)

这是因为grails命名协议。请参阅Dependency Injection Basics部分以了解您问题中的行为。

答案 1 :(得分:0)

添加代理时,您不会将其实例化为spring服务。那时它只是一个普通的课程。要将它作为弹簧服务使用,必须按照惯例注入服务。希望有所帮助