2009-02-22 24 views
6

मैं अपने grails परियोजना के Bootstrap.groovy में अपने नष्ट बंद होने में एक बीन का उपयोग करने के लिए देख रहा हूँ। इसे कैसे प्राप्त किया जाए इस पर कोई विचार?Grails: बूटस्ट्रैप कोड के विनाश बंद करने में वसंत सेम तक पहुंच?

मुझे लगता है कि servletContext तक कोई पहुंच नहीं है ...?

उत्तर

15

आप एक एक (बूटस्ट्रैप के बंद होने को नष्ट सहित) हर जगह से applicationContext के संदर्भ में प्राप्त कर सकते हैं कोड की है कि हिस्सा का उपयोग कर:

def ctx = org.codehaus.groovy.grails.web.context.ServletContextHolder.servletContext.getAttribute(org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes.APPLICATION_CONTEXT); 

हो रही एक सेम के लिए एक संदर्भ ctx.beanName के रूप में के रूप में आसान है।

import org.springframework.context.ApplicationContext; 
import org.codehaus.groovy.grails.web.context.ServletContextHolder; 
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes; 

public class SpringUtil { 

    public static ApplicationContext getCtx() { 
     return getApplicationContext(); 
    } 

    public static ApplicationContext getApplicationContext() { 
     return (ApplicationContext) ServletContextHolder.getServletContext().getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT); 
    } 

    @SuppressWarnings("unchecked") 
    public static <T> T getBean(String beanName) { 
     return (T) getApplicationContext().getBean(beanName); 
    } 

} 

और एक उदाहरण:

def bean = SpringUtil.getBean("beanName") 

चीयर्स, सिगी

2

हम्म, मुझे का उपयोग कर बूटस्ट्रैप में नष्ट ब्लॉक बंद करने का कोई भी उदाहरण नहीं मिल रहा है। डॉक्स से:

 
    It is not guaranteed that {{destroy}} will be called unless the 
application exits gracefully (for example by using the application 
server's shutdown command) so don't rely on it too much 

एक अनुमान के रूप में, मैं कहना है कि पहले से ही ServletContext नष्ट कर दिया गया होगा {{}} को नष्ट बूटस्ट्रैप के बंद होने निष्पादित किया जाता है, ताकि सेम आप पहुँचने का प्रयास कर रहे हैं इससे पहले कि पहले से ही चला गया है क्या कोई पुष्टि कर सकता है?

6

मैं जानता हूँ कि मैं

यहां एक छोटा util वर्ग (जावा में लिखा) है कि इस कार्य को आसान बनाने में कर सकते हैं मैं यहाँ सब कुछ देर से और सब कुछ के बाद से मुझे Google के माध्यम से मिला ...

आपका बूटस्ट्रैप वर्ग मुझे प्राप्त करता है स्प्रिंग बीन्स के साथ नाम से, सभी सेवाओं और नियंत्रकों और सामान की तरह। यदि आप एक बीन चाहते हैं, तो बस इसे नाम से परिभाषित करें और यह दिखाएगा। अन्यथा, केवल grails def आवेदन करें और grails पर जाएं आवेदन। MainContext.getBean आदि