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

で宣言されたresources.groovyBean は通常の Spring Bean であり、デフォルトではオートワイヤリングに参加しません。autowireプロパティを明示的に設定することで、これを行うことができます。

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

testService特定のケースでは、 で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
}

これは、 「既存の Bean の参照」の下の Grails ドキュメントの「Grails と Spring」セクションに記載されています。

于 2013-06-04T14:31:56.940 に答える