这里有Grails2.4.x。如果我使用grails create-service com.example.Widget创建了Grails服务,那么如何将该服务(“bean”)的引用注入(inject)src/groovy下的类中?

实际上,Grails官方文档中的任何地方都没有对此进行解释,并且广泛的搜索使nadda背弃了。

最佳答案

1)可以使用resources.groovy使用Spring Beans将服务注入(inject)到非人工的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)除了注入(inject)WidgetService外,还有一种替代方法-使用Holders类获取grailsApplication,该autowire=true将引用现有的bean。
import grails.util.Holders

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

    ...
}

**更新**

4)还有一个选项是1)和2)的混合-
通过ojit_code resources.groovy 中的ojit_code注入(inject)bean:

MyClass.groovy
class MyClass {
    def widgetService
    ...
}

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

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

10-07 13:16
查看更多