2013-06-04 38 views
6

Sử dụng Grails 2.2.1Làm thế nào để ĐÚNG tiêm dịch vụ Grails sử dụng Spring resource.groovy

Tôi có dịch vụ Grails sau định nghĩa:

package poc 

class TestService { 
    def helperService 
} 

class HelperService { 
} 

Tôi đã sử dụng các TestService như sau (resources.groovy) :

test(poc.TestService) { 

} 

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

Mọi thứ hoạt động trừ khi dịch vụ trợ giúp tự động tạo ra, như mong đợi khi dịch vụ tạo bởi Grails. Cách duy nhất tôi có thể làm cho nó hoạt động là tiêm theo cách thủ công như sau:

//added 
helper(poc.HelperService) { 
} 

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

Vấn đề là nó không được tiêm giống như cách thức của Grails. Dịch vụ thực tế của tôi khá phức tạp và nếu tôi phải tiêm mọi thứ theo cách thủ công, bao gồm tất cả các phụ thuộc.

+0

Dịch vụ Grails được tiêm theo mặc định nếu sử dụng danh pháp thích hợp. Bạn không cần phải nhập trong 'resources.groovy' cho các dịch vụ. Vấn đề bạn đang phải đối mặt với actuall là gì? – dmahapatro

Trả lời

9

Đậu được khai báo trong resources.groovy là đậu bình thường và không mặc định tham gia vào autowiring. Bạn có thể làm như vậy bằng cách thiết lập thuộc tính autowire vào chúng một cách rõ ràng:

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

Trong trường hợp cụ thể của bạn, bạn không cần phải xác định đậu testService trong resources.groovy của bạn, chỉ đơn thuần là thiết lập một tham chiếu đến nó từ bạn jmsContainer bean giống như vậy:

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

Đây là tài liệu trong "Referenced Current Beans".

+0

Ngoài ra, tự động theo tên sẽ chỉ được thực hiện trên các thuộc tính bean được đánh dấu bằng chú thích mùa xuân '@ Autowired' –