我正在使用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只是一个变量名,它不应该影响事务的行为。 任何人都可以解释原因吗?
答案 0 :(得分:0)
这是因为grails命名协议。请参阅Dependency Injection Basics部分以了解您问题中的行为。
答案 1 :(得分:0)
添加代理时,您不会将其实例化为spring服务。那时它只是一个普通的课程。要将它作为弹簧服务使用,必须按照惯例注入服务。希望有所帮助