6

使用 Grails 2.2.1

我定义了以下 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 不同。我的实际服务非常复杂,如果我必须手动注入所有内容,包括所有依赖项。

4

1 回答 1

9

中声明的 Beanresources.groovy是普通的 Spring bean,默认情况下不参与自动装配。您可以通过autowire显式设置它们的属性来做到这一点:

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

在您的特定情况下,您不需要testService在您的 bean 中定义 bean resources.groovy,只需从您的 bean 中设置对它的引用,jmsContainer如下所示:

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

这记录在Grails 文档的“引用现有 Bean”下的“Grails 和 Spring”部分。

于 2013-06-04T14:31:56.940 回答