在Grails PluginDescriptor.groovy文件中注入服务?

时间:2015-03-30 12:02:40

标签: grails grails-plugin

我正在尝试将Grails应用程序转换/转换为Grails插件。这篇文章对我这样做很有帮助: http://burtbeckwith.com/blog/?p=1973

在复制粘贴文件时,按照上面的链接我被困在Bootstrap.groovy文件中。虽然我必须将我的Bootstrap.groovy的init()代码粘贴到" .doWithApplicationContext"我已经这样做了,我有关于注入服务的问题。这是我的应用程序的Bootstrap文件:

class BootStrap {

    //Injecting voice recordign service
    def processRecordingVoiceRecognizitonService

    //Injecting Service to Connect to AMQ Server to Send Recording 
    def AMQConnectionManagementService

    //Injecting AMQ Publisher to Publish Voice Recognition Results
    def messagePublisherService

    //Injecting AMQ Consumer to Consume Voice Model Creation Notifications
    def messageConsumerService
    .
    .
    .
    .
    .
    .
    .

我可以看到我在我的Bootstap中注入服务。 我在PluginDesciptor.groovy的开头粘贴了那段代码,但是Intellij Idea没有显示注入标志,这意味着没有注入服务。 实际上是否可以在插件描述符中注入服务?如果没有,那么在服务文件中初始化和建立必要连接的工作是什么?

我找到了一个相关的问题,但无法理解。这里是以防万一的链接。 inject service into instance of src/groovy class

1 个答案:

答案 0 :(得分:2)

插件描述符生命周期中与BootStrap等效的点是doWithApplicationContext,它接收对ApplicationContext的引用,您可以从中获取所需的任何服务。您无法以正常方式将服务注入描述符,因为在设置ApplicationContext之前,实例化了描述符(并调用了几个关键方法)。

def doWithApplicationContext = { applicationContext ->
  applicationContext.messagePublisherService.someMethodName()

或者,插件可以通过命名MyPluginBootStrap.groovy来为应用程序提供引导伪像 - grails-app/conf中名称​​以 BootStrap结尾的任何Groovy类都将被视为一个bootstrap artefact,它只是插件中的普通BootStrap.groovy被排除在“依赖于插件的应用程序”之外。