2011-03-24 90 views
3

我正在使用Grails 1.2.1。我在我的src/groovy文件中有一个类,我想在其中注入对服务的引用。所以我有...如何正确地将服务注入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。另外,我不喜欢在每个类实例化时创建一个新的服务实例。关于如何优化这个的任何想法?

谢谢 - 戴夫

回答

5

调用getBean()方法时,刚开的单参考你没有创建服务的新实例。如果这个bean是一个原型bean,那么你会得到新的实例,但Grails服务不是 - 它们是单身。

这不是非常“常规”,但是您正在访问工件之外的Spring bean,因此您需要从应用程序上下文中像您一样抽取bean,或者在您将bean传入时调用HttpTransporter。理想情况下,你可以返工调用代码,所以你提供的依赖关系,而不是拉他们:

HttpTransporter(URI uri, HttpServletResponse response, utilityService) { 
    this.uri = uri 
    this.response = response 
    this.utilityService = utilityService 
} 

如果你不能做到这一点(你不显示任何调用代码,因此目前还不清楚它是否会是实际的),那么是的,你确实需要使用一种不那么优雅的方法。