Grails服务类交叉参考

时间:2011-11-03 22:55:55

标签: grails service

我意识到Grails服务类是Spring管理的单例。我也知道你可以通过在camel情况下使用serviceClassName声明一个本地def来引用另一个服务类。让我感到惊讶的是,我似乎无法像这样一起交叉参考服务类

 class FirstService {

   def secondService
 ...
 }

 class SecondService {

   def firstService
 ...
 }

对每个人来说这是真的吗,还是我在......部分的某个地方搞砸了?

1 个答案:

答案 0 :(得分:16)

当存在循环引用时,Grails无法注入。实际上你应该在FactoryBean is not fully initialized yet的行中得到一个例外。关于这个问题有一个JIRA问题,他们表示他们不会解决这个问题,因为它更多地与Spring相关而不是Grails(http://jira.grails.org/browse/GRAILS-5080

但是,JIRA中引用了一种解决方法,我可以验证是否适用于Grails 2.0.RC1。在SecondService中,将其设为protected def firstService并在其下方添加def grailsApplication,然后添加方法def initialize() { this.firstService = grailsApplication.mainContext.firstService }。最后,在BootStrap.groovy中,添加def firstService,然后在init闭包中添加secondService.initialize()。不是一个漂亮的解决方案,但这将使你想要的所有东西都连接起来。