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

Dav*_*ave 3 grails

我正在使用Grails 1.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
Run Code Online (Sandbox Code Playgroud)

但这似乎非常反Groovy/Grails.另外,我不喜欢在每个类实例化时创建一个新的服务实例.关于如何优化这个的任何想法?

谢谢, - 戴夫

Bur*_*ith 5

在调用getBean()时,您不是在创建服务的新实例,只是获取对单例的引用.如果bean是原型bean,那么你会得到新的实例,但Grails服务不是 - 它们是单例.

这不是很"常规",但是你在工件之外访问Spring bean,所以你需要像你正在做的那样从应用程序上下文中提取bean,或者在调用HttpTransporter时传入bean.理想情况下,您可以重新设计调用代码,以便提供依赖项而不必提取它们:

HttpTransporter(URI uri, HttpServletResponse response, utilityService) { 
   this.uri = uri
   this.response = response
   this.utilityService = utilityService
}
Run Code Online (Sandbox Code Playgroud)

如果你不能这样做(你没有显示任何调用代码,因此不清楚它是否实用)那么是的,你需要使用一种不太优雅的方法.