मैं src/groovy
के तहत ग्रोवी क्लास में grailsApplication
तक पहुंचने का प्रयास कर रहा हूं लेकिन मुझे शून्य सूचक अपवाद मिलता है। मैंने एक ही कक्षा और एक ही परिणाम में एक सेवा इंजेक्ट करने की कोशिश की। मैं grailsApplication
या ग्रोवी क्लास से सेवा कैसे प्राप्त कर सकता हूं? (मैं Grails 1.3.7 का उपयोग कर रहा हूँ)एक्सेस ग्रेल्स ग्रोवी क्लास में आवेदन या सेवा
उत्तर
निर्भरता इंजेक्शन src/groovy
के तहत ग्रोवी कक्षाओं के लिए काम नहीं करता है। आप grailsApplication
ApplicationHolder
इस तरह का उपयोग कर तक पहुँच प्राप्त कर सकते हैं:
import org.codehaus.groovy.grails.commons.ApplicationHolder
def grailsApplication = ApplicationHolder.application
आप इस तरह सभी सेवाओं का उपयोग कर सकते हैं:
def allServicesArtefacts = grailsApplication.services
यह एक आकर्षण की तरह काम करता है! आपका बहुत बहुत धन्यवाद ! –
grails के लिए 1.3.7 यह एक आदर्श समाधान है। हालांकि grails v2 + के लिए आपको टोबीस क्राफ्ट से समाधान का उपयोग करना चाहिए। – Archer
ApplicationHolder वर्ग नए Grails संस्करणों (2.0 और ऊपर) में मान्य नहीं है।
एक और तरीका है, जो बर्ट के ब्लॉगपोस्ट में से एक में वर्णन किया गया है: http://burtbeckwith.com/blog/?p=1017
महान जानकारी! धन्यवाद! – Archer
मुझे आश्चर्य है कि उन्होंने अपने धारकों को क्यों हटा दिया और फिर हमें अपने स्वयं के धारकों को लिखने के लिए कहा। यदि पैटर्न त्रुटिपूर्ण नहीं है, तो उन्होंने अपने कार्यान्वयन को ठीक क्यों नहीं किया? –
ब्लॉग पोस्ट अक्सर हटा दिया जाता है - पोस्टरिटी के लिए, कृपया अपनी पोस्ट में वास्तविक उत्तर शामिल करें, सिर्फ एक लिंक नहीं! – nickdos
आप वर्गों है कि आप src/ग्रूवी या src/जावा या यहाँ तक कि 3 पार्टी जार तुम सब से निर्भरता इंजेक्शन के साथ भाग लेने के लिए चाहते हैं, तो उन्हें करना है उन्हें grails-app/conf/spring/resource.groovy में कॉन्फ़िगर करें।
आप अपने src/ग्रूवी निर्देशिका में वर्ग mypackage.MyClass है कि इस तरह देखा था: के लिए निम्न grails एप्लिकेशन के अंतर्गत/conf/वसंत जोड़कर
package mypackage
class MyClass{
def grailsApplication
def myMethod(){
//uses grailsApplication
}
}
फिर/resoruces.groovy यह मिलेगा ऑटो इंजेक्शन:
myClass(mypackage.MyClass){bean->
bean.autowire = "byName"
}
यह thusfar तरह grails के किसी भी संस्करण में काम करेंगे, और मैंने कहा तुम भी 3 पार्टी जार उपयोग कर सकते हैं - उदाहरण के लिए मैं हमेशा अपने resources.groovy में निम्नलिखित है:
jdbcTemplate(org.springframework.jdbc.core.JdbcTemplate){
dataSource = ref('dataSource')
}
अधिक व्यापक स्प्रिंग/Grails दस्तावेज़ देखें के लिए:
Grails 2.0 के बाद, आप का उपयोग करना चाहिए:
def grailsApplication = Holders.grailsApplication
ग्रूवी में [Grails 2.x सेवा इंजेक्शन के संभावित डुप्लिकेट/src] (http://stackoverflow.com/questions/10640480/grails-2-x-service-injection-in-groovy-src) – ataylor