【问题标题】:How to properly inject service into groovy class?如何正确地将服务注入 groovy 类?
【发布时间】:2011-03-24 16:58:30
【问题描述】:

我正在使用 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。另外,我不喜欢在每个类实例化时创建一个新的服务实例。关于如何优化它的任何想法?

谢谢,- 戴夫

【问题讨论】:

    标签: grails


    【解决方案1】:

    在调用 getBean() 时,您并没有创建服务的新实例,只是获取了对单例的引用。如果 bean 是原型 bean,那么您将获得新实例,但 Grails 服务不是 - 它们是单例。

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-30
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2019-06-04
      • 1970-01-01
      • 2019-06-03
      相关资源
      最近更新 更多