2013-06-04 39 views
6

使用Grails 2.2.1如何使用Spring resource.groovy

我有以下Grails服務正確定義注入Grails服務:

package poc 

class TestService { 
    def helperService 
} 

class HelperService { 
} 

我已經使用了TestService的如下(resources.groovy) :

test(poc.TestService) { 

} 

jmsContainer(org.springframework.jms.listener.DefaultMessageListenerContainer) { 
    connectionFactory = jmsConnectionFactory 
    destinationName = "Test" 
    messageListener = test 
    autoStartup = true 
} 

一切正常,除了helperService的自動注射,因爲當服務由Grails的創建它的預期。我可以得到它的工作的唯一方法是手動注入它如下:

//added 
helper(poc.HelperService) { 
} 

//changed 
test(poc.TestService) { 
    helperSerivce = helper 
} 

的問題是,它不是注射方式一樣Grails的一樣。我的實際服務非常複雜,如果我不得不手動注入所有東西,包括所有依賴關係。

+0

如果使用適當的命名法,默認情況下會注入Grails服務。您不需要在「resources.groovy」中輸入服務。你面臨的問題是什麼? – dmahapatro

回答

9

在resources.groovy中聲明的bean是正常的Spring bean,並且默認情況下不會參與自動裝配。您可以通過顯式設置對他們的自動裝配物業這樣做:

aBean(BeanClass) { bean -> 
    bean.autowire = 'byName' 
} 

在特定情況下,你不需要在你的resources.groovy定義TestService的豆,只是從成立對它的引用您的jmsContainer豆像這樣:

jmsContainer(org.springframework.jms.listener.DefaultMessageListenerContainer) { 
    connectionFactory = jmsConnectionFactory 
    destinationName = "Test" 
    messageListener = ref('testService') // <- runtime reference to Grails artefact 
    autoStartup = true 
} 

這在"Grails and Spring" section of the Grails Documentation下的「引用現有豆」記錄。

+0

另外,通過名稱自動裝配只能在由'@ Autowired'標記的bean屬性上完成Spring註記 –