2013-06-04 18 views
6

Korzystanie Grails 2.2.1Jak prawidłowo wstrzykiwać przy użyciu usługi Grails wiosna resource.groovy

Mam następujące usługi Grails zdefiniowane:

package poc 

class TestService { 
    def helperService 
} 

class HelperService { 
} 

Użyłem TestService jako obserwacji (resources.groovy) :

test(poc.TestService) { 

} 

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

Wszystko działa z wyjątkiem automatycznego wtrysku usługi helperService, ponieważ oczekuje się, że usługa zostanie utworzona przez Grails. Jedynym sposobem mogę zmusić go do pracy jest ręcznie wprowadzić go następująco:

//added 
helper(poc.HelperService) { 
} 

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

Problemem jest to, że nie jest wstrzykiwanie w ten sam sposób, jak robi Grails. Moja rzeczywista usługa jest dość skomplikowana i jeśli będę musiała wstrzykiwać wszystko ręcznie, łącznie ze wszystkimi zależnościami.

+0

Usługi Grails są wstrzykiwane domyślnie, jeśli stosowana jest odpowiednia nomenklatura. Nie potrzebujesz wpisu w 'resources.groovy' dla usług. Na czym polega problem, z którym się zmagacie? – dmahapatro

Odpowiedz

9

Fasola zadeklarowana w resources.groovy to normalne fasolki szparagowe i domyślnie nie uczestniczą w autowiring. Można to zrobić poprzez ustawienie właściwości autowire na nich wyraźnie:

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

W Twoim konkretnym przypadku, nie trzeba zdefiniować fasoli testService w resources.groovy, po prostu utwórz odniesienie do niej ze swojego jmsContainer fasoli tak:

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

jest to udokumentowane w "Grails and Spring" section of the Grails Documentation pod „odniesienie istniejących ziaren”.

+0

Ponadto, autowiring według nazwy będzie wykonywany tylko we właściwościach fasoli oznaczonych adnotacją "@ Autowired". –