2011-11-03 23 views
10

मुझे एहसास है कि Grails सेवा कक्षाएं स्प्रिंग प्रबंधित एकल हैं। मुझे यह भी पता है कि आप ऊंट मामले में सर्विस क्लासनाम के साथ स्थानीय डीफ़ की घोषणा करके एक सेवा वर्ग को दूसरे से संदर्भित कर सकते हैं। क्या मैं था कि मैं एक साथ इतनीGrails सेवा वर्ग क्रॉस रेफ

class FirstService { 

    def secondService 
... 
} 

class SecondService { 

    def firstService 
... 
} 

तरह संदर्भ सेवा वर्गों को पार नहीं कर पा रहे इस सभी के लिए सच है हैरान कर दिया, या मैं गंदगी कहीं ... अनुभाग किया था?

उत्तर

14

गोलाकार संदर्भ होने पर Grails इंजेक्ट करने में सक्षम नहीं है। आपको वास्तव में FactoryBean is not fully initialized yet की लाइनों के साथ अपवाद मिलना चाहिए। इसके बारे में एक जिरा मुद्दा है जहां उन्होंने कहा कि वे इसे ठीक नहीं करेंगे, क्योंकि ग्रिल के मुकाबले स्प्रिंग के साथ और अधिक करना है (http://jira.grails.org/browse/GRAILS-5080)

हालांकि, जिरा में उद्धृत एक कार्यवाही है और मैं सत्यापित कर सकता हूं Grails 2.0.RC1 के साथ काम करें। सेकेंड सर्विस में, इसे protected def firstService बनाएं और उसके नीचे def grailsApplication जोड़ें और फिर विधि def initialize() { this.firstService = grailsApplication.mainContext.firstService } जोड़ें। अंत में, BootStrap.groovy में, def firstService जोड़ें और फिर init बंद करें, secondService.initialize() जोड़ें। एक सुंदर समाधान नहीं है, लेकिन यह सब कुछ जिस तरह से आप चाहते हैं उसे जोड़ दिया जाएगा।

+1

पुष्टि करने के लिए धन्यवाद कि मैं पागल नहीं था :) – dbrin

+0

टोड, क्या आपका मतलब बूटस्ट्रैप पर 'def secondervice' था? –

+0

नहीं, क्योंकि '' 'def defervice सेवा 'का कारण एप्लिकेशन संदर्भ में इंजेक्शन दिया जाएगा, इसलिए जब प्रारंभिक सेवा दूसरी सेवा पर चलती है, तो यह' 'grailsAplication.mainContext'' से पहली सेवा पुनर्प्राप्त करने में सक्षम होगी। ' – Todd

संबंधित मुद्दे