2011-03-24 42 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 
} 

如果你不能做到這一點(你不顯示任何調用代碼,因此目前還不清楚它是否會是實際的),那麼是的,你確實需要使用一種不那麼優雅的方法。