如何将 Grails 服务注入 src/groovy 类 [英] How to inject Grails services into src/groovy classes

查看:23
本文介绍了如何将 Grails 服务注入 src/groovy 类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里是 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=trueresources.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆