Groovy/src中的Grails 2.x服务注入

kuc*_*ram 12 grails grails-2.0

我想在Groovy/src类中注入我的服务.normaln依赖注入不起作用:

...
def myService
...
Run Code Online (Sandbox Code Playgroud)

我能够使用它(它的工作原理):

def appCtx = ApplicationHolder.application.getMainContext()
def myService = appCtx.getBean("myService");
Run Code Online (Sandbox Code Playgroud)

但不推荐使用ApplicationHolder.有没有更好的解决方案?

谢谢你的任何建议

Cés*_*sar 28

ApplicationHolder的替换可以是Holders,也可以在静态范围内使用它:

import grails.util.Holders
...

def myService = Holders.grailsApplication.mainContext.getBean 'myService'
Run Code Online (Sandbox Code Playgroud)


Sau*_*abh 12

检查以下Grails常见问题解答,以便从src/groovy中的源代码访问应用程序上下文 - http://grails.org/FAQ#Q:如何从src/groovy中的源代码访问应用程序上下文?

没有与ApplicationHolder等效的ApplicationContextHolder类.要从src/groovy中的Groovy类访问名为EmailService的服务类,请使用以下命令访问Spring bean:

import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes as GA
def ctx = SCH.servletContext.getAttribute(GA.APPLICATION_CONTEXT)
def emailService = ctx.emailService
Run Code Online (Sandbox Code Playgroud)

  • @ubiquibacon - 是的但是"def emailService = ctx.emailService"将是一个交易服务.很抱歉,访问这样的服务有什么问题? (3认同)