2013-01-17 26 views
10

मैं src/groovy के तहत ग्रोवी क्लास में grailsApplication तक पहुंचने का प्रयास कर रहा हूं लेकिन मुझे शून्य सूचक अपवाद मिलता है। मैंने एक ही कक्षा और एक ही परिणाम में एक सेवा इंजेक्ट करने की कोशिश की। मैं grailsApplication या ग्रोवी क्लास से सेवा कैसे प्राप्त कर सकता हूं? (मैं Grails 1.3.7 का उपयोग कर रहा हूँ)एक्सेस ग्रेल्स ग्रोवी क्लास में आवेदन या सेवा

+0

ग्रूवी में [Grails 2.x सेवा इंजेक्शन के संभावित डुप्लिकेट/src] (http://stackoverflow.com/questions/10640480/grails-2-x-service-injection-in-groovy-src) – ataylor

उत्तर

5

निर्भरता इंजेक्शन src/groovy के तहत ग्रोवी कक्षाओं के लिए काम नहीं करता है। आप grailsApplicationApplicationHolder इस तरह का उपयोग कर तक पहुँच प्राप्त कर सकते हैं:

import org.codehaus.groovy.grails.commons.ApplicationHolder 

def grailsApplication = ApplicationHolder.application 

आप इस तरह सभी सेवाओं का उपयोग कर सकते हैं:

def allServicesArtefacts = grailsApplication.services 
+0

यह एक आकर्षण की तरह काम करता है! आपका बहुत बहुत धन्यवाद ! –

+3

grails के लिए 1.3.7 यह एक आदर्श समाधान है। हालांकि grails v2 + के लिए आपको टोबीस क्राफ्ट से समाधान का उपयोग करना चाहिए। – Archer

9

ApplicationHolder वर्ग नए Grails संस्करणों (2.0 और ऊपर) में मान्य नहीं है।

एक और तरीका है, जो बर्ट के ब्लॉगपोस्ट में से एक में वर्णन किया गया है: http://burtbeckwith.com/blog/?p=1017

+1

महान जानकारी! धन्यवाद! – Archer

+1

मुझे आश्चर्य है कि उन्होंने अपने धारकों को क्यों हटा दिया और फिर हमें अपने स्वयं के धारकों को लिखने के लिए कहा। यदि पैटर्न त्रुटिपूर्ण नहीं है, तो उन्होंने अपने कार्यान्वयन को ठीक क्यों नहीं किया? –

+5

ब्लॉग पोस्ट अक्सर हटा दिया जाता है - पोस्टरिटी के लिए, कृपया अपनी पोस्ट में वास्तविक उत्तर शामिल करें, सिर्फ एक लिंक नहीं! – nickdos

2

आप वर्गों है कि आप 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 दस्तावेज़ देखें के लिए:

http://grails.github.io/grails-doc/latest/guide/spring.html

1

Grails 2.0 के बाद, आप का उपयोग करना चाहिए:

def grailsApplication = Holders.grailsApplication