2014-10-31 69 views
0

道歉中常规的,因为有很多的链接在那里,我已经尝试了几个例子,包括已经工作的我的项目(S)是无插件内的东西:的Grails:插件注射服务为一体的src插件

我曾尝试:

在我的插件描述:

def doWithSpring = { 
     someService(SomeService) 
    } 

然后我最终的src/Groovy的内

//def someService = Holders.grailsApplication.mainContext.getBean 'someService' 
def someService 

无上述作品...

如果我实例化服务一切似乎都做工精细,我更愿意把它注射和它只是采取了很多时间做一些很基本:(

SomeService someService =新SomeService()

任何帮助,将不胜感激

不,我曾经看到过(在一个插件中),我应包括的conf /春/ resources.groovy,并在那里初始化豆?

+0

如何是你的src/groovy类调用 - 从控制器?服务? – 2014-10-31 17:31:39

+0

嗨Burt。它的一个websockets的端点因此直接从gsp调用。https://github.com/vahidhedayati/grails-jenkins-plugin/blob/master/ src/groovy/grails/plugin/jenkins/JenkinsEndPoint.groovy – Vahid 2014-10-31 18:34:35

回答

2

在这种情况下,像大多数情况下,是访问你想要什么,而无需使用持有人的方式。 Groovy类执行ServletContextListener,所以有一个contextInitialized方法,ServletContextEvent事件包含ServletContext。所以没有必要使用ServletContextHolder来获得ServletContext - 它就在那里。您可以从FAQ中看到弹簧ApplicationContext作为属性存储在ServletContext中。一旦你有了,你可以访问你想要的任何Spring bean;在这种情况下,jenkinsServicegrailsApplication豆(你可以直接从grailsApplication的配置,而无需使用Holders了点。

我做了这些改变,做了一堆的清理,并派拉请求。

+0

谢谢伯特。你是我的英雄 :) – Vahid 2014-11-01 10:35:38

0

您可以在src/groovy类注入你的服务,像这样:

import com.example.SomeService 
import grails.util.Holders 

class SrcGroovy { 

    SomeService someService = Holders.applicationContext.getBean("someService") 

    // ... 
} 
+0

感谢Ken,会试试这看起来有点不同于我上面的版本 – Vahid 2014-10-31 17:06:14

+0

这是造成一些奇怪的问题 - src/groovy文件是一个端点并返回:404和纯文本文档的字符编码没有声明。 ... – Vahid 2014-10-31 17:19:04

+1

这不是注射,它是拉动外部资源。 Rod和Spring团队一直花费时间开发一个使用依赖注入和控制反转的优秀框架,现在我们回到老方法。不,不是我:) – 2014-10-31 17:30:21