这里是Grails 2.4.x.如果我使用pBuffer
创建了Grails服务,那么如何将该服务的引用(“bean”)注入grails create-service com.example.Widget
下的类?
这实际上没有在官方Grails文档中的任何地方解释过,并且广泛的搜索转回了nadda。
答案 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的“魔力”(无论好坏)。