我正在使用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
但这似乎非常反Groovy / Grails。另外,我不喜欢在每个类实例化时创建一个新的服务实例。关于如何优化这个的任何想法?
谢谢, - 戴夫
答案 0 :(得分:5)
在调用getBean()时,您没有创建服务的新实例,只是获取对单例的引用。如果bean是原型bean,那么你会得到新的实例,但Grails服务不是 - 它们是单例。
这不是很'groovy',但你正在访问一个工件之外的Spring bean,所以你要么像你正在做的那样从应用程序上下文中取出bean,要么在你调用时传入bean HttpTransporter。理想情况下,您可以重新设计调用代码,以便提供依赖关系,而不是必须提取它们:
HttpTransporter(URI uri, HttpServletResponse response, utilityService) {
this.uri = uri
this.response = response
this.utilityService = utilityService
}
如果你不能这样做(你没有显示任何调用代码,因此不清楚它是否实用)那么是的,你需要使用不太优雅的方法。