这里有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的“魔术”(无论好坏)。