【问题标题】:Grails service class cross refGrails 服务类交叉引用
【发布时间】:2011-11-03 22:55:54
【问题描述】:

我意识到 Grails 服务类是 Spring 管理的单例。我也知道你可以通过在骆驼案例中使用 serviceClassName 声明一个本地 def 来从另一个服务类中引用一个服务类。令我惊讶的是,我似乎无法像这样交叉引用服务类

 class FirstService {

   def secondService
 ...
 }

 class SecondService {

   def firstService
 ...
 }

这对每个人都是如此,还是我在 ... 部分的某个地方搞砸了?

【问题讨论】:

    标签: grails service


    【解决方案1】:

    当存在循环引用时,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()。这不是一个很好的解决方案,但这会让一切都按照你想要的方式连接起来。

    【讨论】:

    • 托德,你是说 Bootstrap 上的 def secondService 吗?
    • 不,因为def firstService会导致它被注入到应用程序上下文中,所以当在secondService上运行initialize时,它将能够从grailsApplication.mainContext检索firstService
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2011-03-03
    相关资源
    最近更新 更多