sme*_*eeb 16 grails dependency-injection
Grails 2.4.x在这里.如果我使用创建了Grails服务grails create-service com.example.Widget,那么如何将该服务的引用("bean")注入到下面的类中src/groovy?
这实际上没有在官方Grails文档中的任何地方解释,并且广泛的搜索转回了nadda.
tyl*_*wal 28
1)您可以使用Spring Beans将服务注入非artefact groovy文件,使用resources.groovy:
MyClass.groovy
class MyClass {
def widgetService
...
}
Run Code Online (Sandbox Code Playgroud)
resources.groovy
beans = {
myclass(com.example.MyClass) {
widgetService = ref('widgetService')
}
}
Run Code Online (Sandbox Code Playgroud)
2)还有一个额外的@Autowired注释可以做同样的事情:
MyClass.groovy
import org.springframework.beans.factory.annotation.Autowired
class MyClass {
@Autowired
def widget
...
}
Run Code Online (Sandbox Code Playgroud)
resources.groovy
beans = {
myclass(com.example.MyClass) {}
}
Run Code Online (Sandbox Code Playgroud)
注意 - 这次myclassbean不需要引用widget.
3)有一种替代方法可以注入WidgetService- 使用Holders类来获取grailsApplication将引用现有bean的类.
import grails.util.Holders
class MyClass {
def widgetService = Holders.grailsApplication.mainContext.getBean('widgetService')
...
}
Run Code Online (Sandbox Code Playgroud)
****更新
4)还有另一个选项是1)和2)的混合 - autowire=true在resources.groovy中注入bean :
MyClass.groovy
class MyClass {
def widgetService
...
}
Run Code Online (Sandbox Code Playgroud)
resources.groovy
beans = {
myclass(com.example.MyClass) { bean ->
bean.autowire = true
}
}
Run Code Online (Sandbox Code Playgroud)
这是我一直在本地使用的方法,因为我觉得它是最干净的,但它确实更多地利用了Grail的"魔力"(无论好坏).