Grails 如何正确地将服务注入groovy类?

Grails 如何正确地将服务注入groovy类?,grails,Grails,我正在使用Grails1.2.1。我的src/groovy文件中有一个类,我想在其中插入对服务的引用。所以我 def utilityService public HttpTransporter(URI uri, HttpServletResponse response) { this.uri = uri; this.response = response; def ctx = ApplicationHolder.getApplication().getMainCont

我正在使用Grails1.2.1。我的src/groovy文件中有一个类,我想在其中插入对服务的引用。所以我

def utilityService

public HttpTransporter(URI uri, HttpServletResponse response) { 
    this.uri = uri;
    this.response = response;
    def ctx = ApplicationHolder.getApplication().getMainContext();
    utilityService = ctx.getBean("utilityService");
}   // HttpTransporter
但这似乎非常反Groovy/Grails。另外,我不喜欢在每次类实例化时创建新的服务实例。关于如何优化这一点有什么想法吗


谢谢,-Dave

调用getBean()时,您并不是在创建新的服务实例,而是在获取对singleton的引用。如果bean是一个原型bean,那么您将获得新的实例,但Grails服务不是——它们是单例

这不是很“groovy”,但您在工件外部访问SpringBean,因此您需要像现在这样从应用程序上下文中拉入Bean,或者在调用HttpTransporter时传入Bean。理想情况下,您可以重新编写调用代码,以便提供依赖项,而不必提取它们:

HttpTransporter(URI uri, HttpServletResponse response, utilityService) { 
   this.uri = uri
   this.response = response
   this.utilityService = utilityService
}
如果您不能做到这一点(您没有显示任何调用代码,因此不清楚它是否实用),那么是的,您确实需要使用不那么优雅的方法