如何将 Grails 服务注入 src/groovy 类 [英] How to inject Grails services into src/groovy classes
问题描述
这里是 Grails 2.4.x.如果我使用 grails create-service com.example.Widget
创建了一个 Grails 服务,那么我怎样才能将该服务的引用(一个bean")注入到 src/groovy 下的一个类中
?
Grails 2.4.x here. If I created a Grails service using grails create-service com.example.Widget
, then how can I inject a reference of that service (a "bean") into a class under src/groovy
?
这实际上在 Grails 官方文档中没有任何解释,广泛的搜索使 nadda 返回.
This is actually not explained anywhere in the official Grails docs, and extensive searching turned back nadda.
推荐答案
1) 您可以使用 Spring Beans 将服务注入到非人工制品的 groovy 文件中,使用 resources.groovy代码>:
1) You can use Spring Beans to inject a service into a non-artefact groovy file, using resources.groovy
:
MyClass.groovy
class MyClass {
def widgetService
...
}
resources.groovy
beans = {
myclass(com.example.MyClass) {
widgetService = ref('widgetService')
}
}
2) 还有一个额外的 @Autowired
注释可以做同样的事情:
2) There is also an additional @Autowired
annotation that can do the same thing:
MyClass.groovy
import org.springframework.beans.factory.annotation.Autowired
class MyClass {
@Autowired
def widget
...
}
resources.groovy
beans = {
myclass(com.example.MyClass) {}
}
注意 - 这次 myclass
bean 不需要对 widget
的引用.
Notice - this time the myclass
bean doesn't need the reference to the widget
.
3) 注入 WidgetService
的替代方法 - 使用 Holders
类来获取 grailsApplication
它将引用现有的 bean.
3) There is an alternative to injecting the WidgetService
- using the Holders
class to get the grailsApplication
which will have a reference to the existing bean.
import grails.util.Holders
class MyClass {
def widgetService = Holders.grailsApplication.mainContext.getBean('widgetService')
...
}
**更新**
4) 还有另一种选择是 1) 和 2) 的混合 -让 autowire=true
在 resources.groovy 中注入 bean:
4) There is another option that is a hybrid of 1) and 2) -
Having the bean(s) injected by autowire=true
within resources.groovy:
MyClass.groovy
class MyClass {
def widgetService
...
}
resources.groovy
beans = {
myclass(com.example.MyClass) { bean ->
bean.autowire = true
}
}
这是我一直在本地使用的方法,因为我觉得它是最干净的,但它确实更多地利用了 Grail 的魔法"(无论好坏).
This is the approach I've been using locally as I feel it's the cleanest, but it does take more advantage of Grail's 'magic' (for better or worse).
这篇关于如何将 Grails 服务注入 src/groovy 类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!