स्प्रिंग एओपी वसंत ढांचे के आवश्यक भागों में से एक है। बहुत ही मूल अवस्था में, स्प्रिंग फ्रेमवर्क IoC और AOP पर आधारित है। वसंत के आधिकारिक पाठ्यक्रम में एक स्लाइड है जिसमें यह कहता है:
AOP फ्रेमवर्क के सबसे महत्वपूर्ण भागों में से एक है।
वसंत में एओपी कैसे काम करता है, यह समझने के लिए महत्वपूर्ण बिंदु यह है कि जब आप स्प्रिंग के साथ एक पहलू लिखते हैं तो हम आपकी वस्तुओं के लिए एक प्रॉक्सी बनाने के साथ फ्रेमवर्क को लिख देते हैं, JDKDynamicProxy
अगर आपका बीन एक इंटरफ़ेस लागू करता है या सीजीएलआईबी के माध्यम से अगर आपका बीन किसी भी लागू नहीं करता है। इंटरफेस। याद रखें कि यदि आप 3.2 संस्करण से पहले स्प्रिंग का उपयोग कर रहे हैं तो आपको अपने वर्ग-पथ में 2.2 cglib होना चाहिए। स्प्रिंग 3.2 से शुरू करना बेकार है क्योंकि cglib 2.2 को कोर में शामिल किया गया था।
बीन निर्माण में रूपरेखा एक ऐसी प्रॉक्सी बनाएगी जो आपकी वस्तुओं को लपेटती है और सुरक्षा, लेनदेन प्रबंधन, लॉगिंग इत्यादि जैसे क्रॉस कटिंग चिंताओं को जोड़ती है।
इस तरह से प्रॉक्सी निर्माण एक बिंदु अभिव्यक्ति के लिए शुरू किया जाएगा जो यह तय करने के लिए कि बीन्स और विधियों को प्रॉक्सी के रूप में निर्मित करने के लिए रूपरेखा लिखेगा। सलाह आपके कोड की तुलना में अधिक जिम्मेदारी होगी। याद रखें कि इस प्रक्रिया में पॉइंटकट केवल सार्वजनिक विधियों को कैप्चर करता है जिन्हें अंतिम घोषित नहीं किया जाता है।
अब, जबकि स्प्रिंग एओपी में एस्पेक्टेज में कंटेनर की बुनाई कंटेनर द्वारा शुरू की जाएगी, एस्पेक्टज में आपको अपने कोड के पोस्ट संकलन के साथ बाइटकोड संशोधन के माध्यम से यह प्रदर्शन करना होगा। इस कारण से मेरी राय में स्प्रिंग दृष्टिकोण एस्पेक्टेज की तुलना में सरल और अधिक प्रबंधनीय है।
दूसरी ओर, स्प्रिंग एओपी के साथ आप एओपी की सभी शक्ति का उपयोग नहीं कर सकते क्योंकि कार्यान्वयन प्रॉक्सी के माध्यम से किया जाता है और आपके कोड के संशोधन के माध्यम से नहीं।
एस्पेक्टज की तरह, आप स्प्रिंगएओपी में लोड-टाइम बुनाई का उपयोग कर सकते हैं। आप वसंत में इस सुविधा से लाभ उठा सकते हैं एक एजेंट और विशेष कॉन्फ़िगरेशन के साथ, @EnabledLoadWeaving
या एक्सएमएल में लागू किया जाता है । आप उदाहरण के रूप में नाम-स्थान का उपयोग कर सकते हैं। हालाँकि स्प्रिंग AOP में आप सभी मामलों को रोक नहीं सकते। उदाहरण के लिए, new
कमांड स्प्रिंग एओपी में समर्थित नहीं है।
हालांकि स्प्रिंग एओपी में आप aspectof
स्प्रिंग कॉन्फ़िगरेशन बीन में फैक्टरी विधि के उपयोग के माध्यम से एस्पेक्टेज के उपयोग से लाभ उठा सकते हैं ।
इस कारण से कि स्प्रिंग एओपी मूल रूप से कंटेनर से निर्मित एक प्रॉक्सी है, इसलिए आप एओपी का उपयोग केवल स्प्रिंग बीन्स के लिए कर सकते हैं। जबकि पहलू के साथ आप अपने सभी बीन्स में पहलू का उपयोग कर सकते हैं। तुलना का एक और बिंदु डिबग और कोड व्यवहार की भविष्यवाणी है। स्प्रिंग एओपी के साथ, जावा कंपाइलर से सभी कार्य पूर्वनिर्मित हैं और आपके स्प्रिंग बीन के लिए प्रॉक्सी बनाने के लिए पहलू बहुत ही शानदार तरीका है। AspectJ में यदि आप कोड को संशोधित करते हैं, तो आपको अधिक संकलन की आवश्यकता होती है और यह समझने के लिए कि आपके पहलू कहाँ हैं, कठिन हो सकता है। यहां तक कि वसंत में बुनाई बंद करना सरल है: वसंत के साथ आप अपने कॉन्फ़िगरेशन से पहलू को हटा देते हैं, पुनरारंभ करते हैं और यह काम करता है। AspectJ में आपको कोड recompile करना होगा!
लोड-टाइम बुनाई में, एस्पेक्टेज स्प्रिंग की तुलना में अधिक लचीला है क्योंकि स्प्रिंग एस्पेक्टेज के सभी विकल्पों का समर्थन नहीं करता है। लेकिन मेरी राय में यदि आप बीन की निर्माण प्रक्रिया को बदलना चाहते हैं, तो बेहतर तरीका यह है कि किसी कारखाने में कस्टम लॉगिन का प्रबंधन किया जाए न कि उस पहलू के लोड-टाइम बुनाई के साथ जो आपके नए ऑपरेटर के व्यवहार को बदल देता है।
मुझे उम्मीद है कि एस्पेक्टज और स्प्रिंग एओपी का यह मनोरम वर्णन आपको दो औषधि के अंतर को समझने में मदद करता है