एनोटेशन में उनका उपयोग होता है, लेकिन XML कॉन्फ़िगरेशन को मारने के लिए वे एक रजत गोली नहीं हैं। मैं दोनों को मिलाने की सलाह देता हूँ!
उदाहरण के लिए, यदि स्प्रिंग का उपयोग किया जाता है, तो आपके एप्लिकेशन के निर्भरता इंजेक्शन भाग के लिए XML का उपयोग करना पूरी तरह से सहज है। इससे कोड की निर्भरताएं उस कोड से दूर हो जाती हैं जो इसका उपयोग करेगा, इसके विपरीत, कोड में कुछ प्रकार के एनोटेशन का उपयोग करके निर्भरता की आवश्यकता होती है जो कोड को इस स्वचालित कॉन्फ़िगरेशन से अवगत कराता है।
हालाँकि, ट्रांजेक्शनल मैनेजमेंट के लिए XML का उपयोग करने के बजाय, एनोटेशन के साथ ट्रांसेक्शनल के रूप में एक विधि को चिह्नित करना सही अर्थ है, क्योंकि यह एक जानकारी है जिसे प्रोग्रामर शायद जानना चाहेंगे। लेकिन उस इंटरफ़ेस को एक उपप्रकार के रूप में इंजेक्ट किया जा रहा है इसके बजाय सबटाइपएक्स को कक्षा में शामिल नहीं किया जाना चाहिए, क्योंकि यदि अब आप सबटाइपएक्स को इंजेक्ट करना चाहते हैं, तो आपको अपना कोड बदलना होगा, जबकि आपके पास वैसे भी पहले कोई इंटरफ़ेस अनुबंध था, इसलिए एक्सएमएल के साथ, आपको एक्सएमएल मैपिंग को बदलने की आवश्यकता होगी और ऐसा करने के लिए यह काफी त्वरित और दर्द रहित है।
मैंने JPA एनोटेशन का उपयोग नहीं किया है, इसलिए मुझे नहीं पता कि वे कितने अच्छे हैं, लेकिन मैं तर्क दूंगा कि सेम की मैपिंग को एक्सएमएल में डेटाबेस में छोड़ना भी अच्छा है, क्योंकि ऑब्जेक्ट को इसकी परवाह नहीं करनी चाहिए कि इसकी जानकारी कहां से आई है , यह सिर्फ परवाह करना चाहिए कि यह अपनी जानकारी के साथ क्या कर सकता है। लेकिन अगर आपको JPA पसंद है (मेरे पास इसके साथ कोई समाप्ति नहीं है), हर तरह से, इसके लिए जाएं।
सामान्य तौर पर: यदि कोई एनोटेशन कार्यक्षमता प्रदान करता है और अपने आप में एक टिप्पणी के रूप में कार्य करता है, और इस एनोटेशन के बिना सामान्य रूप से कार्य करने के लिए कुछ विशिष्ट प्रक्रिया के लिए कोड को नीचे नहीं बाँधता है, तो एनोटेशन के लिए जाएं। उदाहरण के लिए, लेन-देन के रूप में चिह्नित एक ट्रांसेक्शनल विधि अपने ऑपरेटिंग लॉजिक को नहीं मारती है, और एक अच्छे कोड-स्तर की टिप्पणी के रूप में भी कार्य करती है। अन्यथा, यह जानकारी शायद एक्सएमएल के रूप में सबसे अच्छी तरह से व्यक्त की जाती है, क्योंकि हालांकि यह अंततः प्रभावित करेगा कि कोड कैसे संचालित होता है, यह कोड की मुख्य कार्यक्षमता को नहीं बदलेगा, और इसलिए स्रोत फ़ाइलों में नहीं है।
@Component
और@Autowired
, यह एक गलत द्विभाजन है। आपके कॉन्फ़िगरेशन को बनाने के अन्य तरीके हैं, जिसमें JavaConfig और groovy config शामिल हैं।