如何将Grails服务注入src / groovy类

时间:2015-10-30 02:24:00

标签: grails dependency-injection

这里是Grails 2.4.x.如果我使用pBuffer创建了Grails服务,那么如何将该服务的引用(“bean”)注入grails create-service com.example.Widget下的类?

这实际上没有在官方Grails文档中的任何地方解释过,并且广泛的搜索转回了nadda。

1 个答案:

答案 0 :(得分:26)

1)您可以使用Spring Beans使用resources.groovy将服务注入到非人工制作的groovy文件中:

<强> MyClass.groovy

class MyClass {
    def widgetService
    ...
}

<强> resources.groovy

beans = {
    myclass(com.example.MyClass) {
        widgetService = ref('widgetService')
    }
}

2)还有一个额外的@Autowired注释可以做同样的事情:

<强> MyClass.groovy

import org.springframework.beans.factory.annotation.Autowired

class MyClass {
    @Autowired
    def widget
    ...
}

<强> resources.groovy

beans = {
    myclass(com.example.MyClass) {}
}

注意 - 这次myclass bean不需要引用widget

3)还可以选择注入WidgetService - 使用Holders类来获取grailsApplication,它将引用现有的bean

import grails.util.Holders

class MyClass {
    def widgetService = Holders.grailsApplication.mainContext.getBean('widgetService')

    ...
}

<强> ** **更新

4)还有另一个选项是1)和2)的混合 - 将autowire=true注入的bean在 resources.groovy 中注入:

<强> MyClass.groovy

class MyClass {
    def widgetService
    ...
}

<强> resources.groovy

beans = {
    myclass(com.example.MyClass) { bean ->
        bean.autowire = true
    }
}

这是我一直在本地使用的方法,因为我觉得它是最干净的,但它确实更多地利用了Grail的“魔力”(无论好坏)。