मान लें कि मेरे पास एक तरीका है जो किसी प्रकार की अपवाद को फेंकता है। अपवाद-फेंकने वाला कोड किसी तृतीय-पक्ष लाइब्रेरी में स्थित है जो बाहरी सेवा तक पहुंचता है। मेरे पास कुछ कक्षाएं हैं जो बाहरी सेवाओं के साथ काम का एक अच्छा सौदा करती हैं और संभावित समस्याओं से निपटने के लिए पूरे अपवाद हैं। जिस मुद्दे पर मैं मार रहा हूं वह यह है कि मेरे पास बहुत सारे अपवाद हो सकते हैं, लेकिन अगर कोई है तो मुझे केवल कुछ कार्यों में से एक करने की आवश्यकता हो सकती है, और इसके बारे में कई बार कोशिश/पकड़ने वाले ब्लॉक हैं। अपवाद का प्रकार भी प्रासंगिक नहीं हो सकता है, या विभिन्न विधियां एक ही प्रकार के अपवाद को फेंक सकती हैं, लेकिन इसे फेंकने की विधि के आधार पर विभिन्न कार्रवाइयों को लेने की आवश्यकता है।अपवाद हैंडलिंग के लिए एनोटेशन का उपयोग करना?
जो मैं खोज रहा हूं वह एक एनोटेशन है जो उस विधि में अपवाद होने पर प्रयास करने/पकड़ने के लिए व्यवहार को आसानी से निर्देशित कर सकता है। मुझे पता है कि स्प्रिंग एपसेक्टजे इस तरह की चीज कर सकता है, लेकिन मैं वर्तमान में किसी भी नई निर्भरता को आसानी से जोड़ने या मौजूदा लोगों को समायोजित करने के लिए पोम को संशोधित करने में सक्षम नहीं हूं। इस प्रकार, मैं उम्मीद कर रहा हूं कि इसे एक कस्टम एनोटेशन के साथ पूरा किया जा सकता है। उदाहरण के लिए:
@Catcher(action=SomeEnum.SOME_ACTION)
public void doSomething(ServiceObj obj) throws SomeException {
ExternalService.makeThingsHappen(obj);
}
मुझे लगता है कि एक अलग वर्ग अपवादों को संभालेगा। एक अतिरिक्त कठिनाई यह है कि मुझे सर्विसऑबज की भी आवश्यकता होगी जो कि पास हो चुकी है। यदि makeThingsHappen() विफल रहता है, तो मुझे अतिरिक्त क्रियाएं करने के लिए obj की आवश्यकता हो सकती है। एक्शन वैरिएबल हैंडलर क्लास को ओबीजे के साथ क्या करना है, बताएगा।
क्या यह गंभीर मकररी के बिना किया जा सकता है, या क्या मैं ऐसा कुछ उम्मीद कर रहा हूं जो अस्तित्व में न हो?
एनोटेशन अपने आप में व्यवहार नहीं जोड़ते हैं। वे मेटाडेटा हैं। आपको उनके लिए एक पार्सर प्रदान करने की आवश्यकता है जो उस व्यवहार को जोड़ सकता है यदि वह उन्हें पाता है। –
मैं इसे मामूली मकर कहूंगा; इसे एओपी या कुछ बाइट-कोड मैनिपुलेशन के साथ तुच्छ रूप से संभाला जा सकता है। –