2012-06-05 6 views
15

मेरे पास कई अंतर्निहित डेटा मॉडल हैं जो स्प्रिंग इवेंट्स को मेरे अंतर्निहित डेटा मॉडल में बदलाव करने के लिए सुन रहे हैं। ApplicationListener<Foo> को लागू करके ये सभी काम। एक बार Foo श्रोताओं अंतर्निहित डेटा मॉडल को संशोधित करने के बाद, मेरे उपयोगकर्ता इंटरफ़ेस को परिवर्तनों को प्रतिबिंबित करने के लिए ताज़ा करने की आवश्यकता है (fireTableDataChanged() सोचें)।क्या मैं यह सुनिश्चित कर सकता हूं कि मेरे स्प्रिंग एप्लिकेशन लिस्टर्स में से एक आखिरी बार निष्पादित हो जाए?

क्या यह सुनिश्चित करने का कोई तरीका है कि Foo के लिए एक विशिष्ट श्रोता हमेशा आखिरी रहता है? या जब कोई अन्य श्रोताओं को किया जाता है तो फ़ंक्शन को कॉल करने का कोई तरीका है? मैं एनोटेशन आधारित वायरिंग और जावा कॉन्फ़िगरेशन का उपयोग कर रहा हूं, अगर यह मायने रखता है।

+1

क्या आप अपने प्रत्येक श्रोताओं में समायोजित ['आदेशित]] (http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/Ordered.html) को लागू करने का प्रयास कर सकते हैं और समायोजित कर सकते हैं उचित आदेश? –

+0

@TomaszNurkiewicz यह आशाजनक लग रहा है, मैं इसे एक सेकंड में कोशिश करूंगा। – Luke

+0

@TomaszNurkiewicz देखभाल आप इसे एक जवाब में डालते हैं ताकि मैं आपको इसके लिए क्रेडिट दे सकूं? यह बहुत अच्छा काम किया! – Luke

उत्तर

26

ApplicationListener को लागू करने वाले आपके सभी बीन्स Ordered को लागू करना चाहिए और उचित ऑर्डर मूल्य प्रदान करना चाहिए। कम मूल्य, जल्दी ही अपने श्रोता द्वारा सक्रिय किया जाएगा:

class FirstListener implements ApplicationListener<Foo>, Ordered { 
    public int getOrder() { 
     return 10; 
    } 
    //... 
} 

class SecondListener implements ApplicationListener<Foo>, Ordered { 
    public int getOrder() { 
     return 20; 
    } 
    //... 
} 

class LastListener implements ApplicationListener<Foo>, Ordered { 
    public int getOrder() { 
     return LOWEST_PRECEDENCE; 
    } 
    //... 
} 

इसके अलावा आप PriorityOrdered लागू कर सकते हैं सुनिश्चित करें कि आपके श्रोताओं में से एक हमेशा पहले शुरू हो जाती है बनाने के लिए।

+0

क्या यह संभव है कि ऑथ इवेंट श्रोताओं के लिए ऑर्डर को अनदेखा किया जाए? मेरे पास 'CustomAuthListener एप्लिकेशन लिस्टनर लागू करता है <सार तत्व प्रमाणीकरण', आदेश दिया गया, लेकिन 'वापसी LOWEST_PRECEDENCE' को कभी भी कॉल नहीं किया गया था। सौभाग्य से मुझे अपनी समस्या को ठीक करने के लिए 'प्रमाणीकरण SUccessEvent' के बजाय' इंटरएक्टिव प्रमाणीकरण Sccessccessvent 'को सुनना पड़ा। –

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

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