0

我正在使用 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 只是一个变量名,它不应该影响事务的行为。谁能解释为什么?

4

2 回答 2

0

添加代理时,您不会将其实例化为弹簧服务。那时它只是一个普通的课程。要将其用作弹簧服务,必须将其作为您通过遵循约定实现的服务来注入。希望有帮助

于 2013-06-10T16:05:32.383 回答
0

这是因为grails命名协议。请参阅依赖注入基础部分以了解您问题中的行为。

于 2013-06-10T08:29:19.757 回答