दिलचस्प पोस्ट
बच्चे के अनूठे मूल्य # एस्कफ़ायरबेस की जांच करने के लिए फ़ायरबेस सुरक्षा नियम कैसे मैं enum मूल्यों के लिए कस्टम स्ट्रिंग स्वरूपण के साथ एक enum बाध्य कन्बोबोक्स है? एंड्रॉइड एप्लिकेशन से इंटरनेट तक पहुंचने के लिए मुझे क्या अनुमति चाहिए? SQL "IN" स्टेटमेंट के लिनक संस्करण जावास्क्रिप्ट में एक विलंब रखें पढ़ने और लिखने दोनों के लिए फाइल खोलें? कार्य में ईवेंट को परिवर्तित करने के लिए पुन: प्रयोज्य पैटर्न एंड्रॉइड 4.0, एक्शन बार पर पाठ कभी नहीं दिखाता है प्रदर्शन को बनाए रखने के लिए मैं ऑटकसेट पर EntityFramework में कितने शामिल कर सकता हूं? PHP में बड़े JSON फ़ाइलों को संसाधित करना मेलमैसेज ऑब्जेक्ट को * .eml या * .msg फ़ाइल के रूप में डिस्क पर कैसे सहेजें I HTML इनपुट में कैरेट स्थिति प्राप्त करें? जावास्क्रिप्ट में एक आइफ्रेम के शरीर की सामग्री कैसे प्राप्त करें? Android से एक JSON HTTP POST अनुरोध भेजा जा रहा है तिथियों की तुलना करना

स्प्रिंग एओपी बनाम एस्पेक्ज जे

मैं इस धारणा के तहत हूं कि स्प्रिंग एओपी का इस्तेमाल विशेष विशिष्ट कार्यों जैसे सुरक्षा, लॉगिंग, लेनदेन इत्यादि के लिए किया जाता है क्योंकि यह ढांचा के रूप में कस्टम जावा 5 एनोटेशन का उपयोग करता है। हालांकि, पहलुओं को अधिक अनुकूल डिजाइन-पैटर्न के आधार पर लगता है

क्या किसी स्प्रिंग अनुप्रयोग में स्प्रिंग एओपी बनाम पहलू का उपयोग करने के विभिन्न पेशेवरों और विपक्ष को उजागर किया जा सकता है?

वेब के समाधान से एकत्रित समाधान "स्प्रिंग एओपी बनाम एस्पेक्ज जे"

वसंत-एओपी पेशेवर

  • AspectJ की तुलना में इसका उपयोग करना आसान है, क्योंकि आपको एलटीडब्ल्यू ( लोड-टाइम बुनाई ) या एपटीक्यू कंपाइलर का उपयोग नहीं करना पड़ता है

  • यह प्रॉक्सी पैटर्न और डेकोरेटर पैटर्न का उपयोग करता है

वसंत-एओपी विपक्ष

  • यह प्रॉक्सी-आधारित एओपी है, इसलिए मूल रूप से आप केवल विधि-निष्पादन जोड़ों का उपयोग कर सकते हैं।
  • एक ही कक्षा में किसी अन्य विधि को बुलाते समय पहलुओं को लागू नहीं किया जाता है।
  • थोड़ा रनटाइम ओवरहेड हो सकता है
  • स्प्रिंग एओपी किसी भी चीज को एक ऐसा पहलू नहीं जोड़ सकता है जो स्प्रिंग फैक्ट्री द्वारा नहीं बनाई गई है

AspectJ पेशेवरों

  • यह सभी जॉइंटप्इंट्स का समर्थन करता है। इसका मतलब है कि आप कुछ भी कर सकते हैं
  • स्प्रिंग एओपी की तुलना में कम रनटाइम ओवरहेड है

AspectJ विपक्ष

  • सावधान रहे। जांचें कि क्या आपके पहलुओं को केवल वही बुलाया जाता है जो आप बुने गए थे।
  • आपको एस्पेक्ज कंपाइलर के साथ अतिरिक्त निर्माण प्रक्रिया की आवश्यकता है या एलटीडब्ल्यू (लोड-टाइम बुनाई)

अन्य लोगों के अलावा क्या कहा गया है – सिर्फ दोहराए जाने के लिए, there are two major differences :

  1. एक बुनाई के प्रकार से संबंधित है
  2. जुड़ने की परिभाषा के लिए एक और

स्प्रिंग एओपी: dynamic proxy if interface exists or cglib library if direct implementation provided. की अवधारणा का उपयोग करते हुए प्रॉक्सी के माध्यम से रनटाइम बुनाई dynamic proxy if interface exists or cglib library if direct implementation provided.

AspectJ: यदि AspectJ Java Tools(ajc compiler) माध्यम से स्रोत उपलब्ध है या AspectJ Java Tools(ajc compiler) संकलन बुनाई (संकलित फाइलों का उपयोग कर) इसके अलावा, स्प्रिंग के साथ बुनाई का समय बढ़ाया जा सकता है – इसे aspectj परिभाषा फ़ाइल की आवश्यकता है और लचीलेपन की पेशकश है।

समय बुनाई का संकलन प्रदर्शन के लाभ (कुछ मामलों में) प्रदान कर सकता है और joinpoint definition in Spring-aop is restricted to method definition only which is not the case for AspectJ.

स्प्रिंग उपयोगकर्ता मैनुअल बहुत सारी जानकारी देगा, सीधे घोड़े के मुंह से।

अध्याय 6.4 – एओपी घोषणा शैली का उपयोग करना आपके लिए मृत है क्योंकि यह दोनों के पेशेवरों और विपक्षों पर चर्चा करता है।

पैराग्राफ 6.1.2 – स्प्रिंग एओपी कैबबिलीट्स और लक्ष्यों और अध्याय 6.2 – @ समर्थन का समर्थन और 6.8 – स्प्रिंग अनुप्रयोगों के साथ पहलू का उपयोग करना विशेष रूप से रोचक होना चाहिए

एक अतिरिक्त नोट: यदि उच्च लोड के तहत प्रदर्शन महत्वपूर्ण है, तो आप पहलू चाहते हैं जो स्प्रिंग एओपी से 9-35 गुना तेज है । 10ns बनाम 355ns ज्यादा पसंद नहीं हो सकते हैं, लेकिन मैंने देखा है कि बहुत से पहलुओं का उपयोग करने वाले लोग 10 के पहलुओं के मूल्य इन मामलों में, आपके अनुरोध पर हजारों पहलुओं पर असर पड़ सकता है उस मामले में आप उस अनुरोध के लिए एमएस जोड़ रहे हैं।

बेंचमार्क देखें

वसंत एओपी वसंत ढांचे के आवश्यक भागों में से एक है। बहुत ही बुनियादी चरण में, वसंत ढांचे आईओसी और एओपी पर आधारित है। स्प्रिंग के आधिकारिक पाठ्यक्रम में एक स्लाइड है जिसमें यह कहते हैं:

एओपी ढांचा के सबसे महत्वपूर्ण भागों में से एक है।

स्प्रिंग काम में एओपी कैसे समझने की मुख्य बात यह है कि जब आप स्प्रिंग के साथ एक पहलू लिखते हैं, तो आप JDKDynamicProxy साथ अपने ऑब्जेक्ट्स के लिए एक प्रॉक्सी निर्माण के साथ ढांचे को JDKDynamicProxy अगर आपकी सेम इंटरफ़ेस लागू करती है या सीजीआईएलबी जरिए आपकी सेम को लागू नहीं करती है कोई भी इंटरफ़ेस याद रखें कि यदि आप संस्करण 3.2 से पहले वसंत का उपयोग कर रहे हैं तो आपके क्लास-पथ में cglib 2.2 होना चाहिए। स्प्रिंग 3.2 से शुरू करना यह बेकार है क्योंकि cglib 2.2 को कोर में शामिल किया गया था।

बीन सृजन में ढांचा एक प्रॉक्सी पैदा करेगा जो आपके ऑब्जेक्ट्स को लपेटता है और क्रॉस कटिंग चिंताओं को सुरक्षा, लेनदेन प्रबंधन, लॉगिंग आदि जैसी जिम्मेदारियों को जोड़ता है।

प्रॉक्सी निर्माण इस तरह से लागू किया जाएगा एक बिंदु कचरा अभिव्यक्ति के लिए शुरू करने के लिए उपकरणों के फ्रेमवर्क निर्णय लेने के लिए कि क्या बीन्स और तरीके प्रॉक्सी के रूप में बनाया जाएगा सलाह आपके कोड के मुकाबले अधिक ज़िम्मेदारी होगी। याद रखें कि इस प्रक्रिया में इंगित करता है कि केवल सार्वजनिक विधियों को अंतिम रूप में घोषित नहीं किया जाता है।

अब, जब स्प्रिंग एओपी में पहलुओं की बुनाई कंटेनर स्टार्ट-अप में कंटेनर द्वारा निष्पादित की जाएगी, आस्पेक्टजे में आपको यह बाइटकोड संशोधन के माध्यम से अपने कोड के पोस्ट संकलन के साथ करना होगा। इस वजह से मेरी राय में स्प्रिंग दृष्टिकोण सरल और एस्पेज जेड से अधिक प्रबंधनीय है।

दूसरी ओर, स्प्रिंग एओपी के साथ आप एओपी की सभी शक्तियों का उपयोग नहीं कर सकते क्योंकि कार्यान्वयन प्रॉक्सी के माध्यम से किया जाता है और आपके कोड के संशोधन के साथ नहीं।

AspectJ में के रूप में, आप SpringAOP में लोड-टाइम बुनाई का उपयोग कर सकते हैं। वसंत में आप इस सुविधा से लाभ उठा सकते हैं एक एजेंट और विशेष कॉन्फ़िगरेशन, @EnabledLoadWeaving या XML में। आप एक उदाहरण के रूप में नाम-स्थान का उपयोग कर सकते हैं। हालांकि वसंत एओपी में आप सभी मामलों को रोक नहीं सकते हैं। उदाहरण के लिए, स्प्रिंग एओपी में new आदेश समर्थित नहीं है।

हालांकि स्प्रिंग एओपी में आप स्प्रिंग aspectof बीन में फैक्ट्री मेथड के aspectof के उपयोग के माध्यम से aspectof के उपयोग से लाभ ले सकते हैं।

कारण यह है कि स्प्रिंग एओपी मूल रूप से कंटेनर से बनाई गई प्रॉक्सी है, इसलिए आप केवल एप को बसंत सेम के लिए इस्तेमाल कर सकते हैं ऐप्पटेक के साथ आप अपने सभी बीन्स में पहलू का उपयोग कर सकते हैं तुलना का दूसरा मुद्दा डिबग और कोड व्यवहार की भविष्यवाणी है। वसंत एओपी के साथ, जॉब जावा कम्पाइलर से सभी को प्रीफोर्म किया जाता है और पहलुओं को आपके स्प्रिंग सेम के लिए प्रॉक्सी बनाने का एक बहुत अच्छा तरीका है। AspectJ में यदि आप कोड को संशोधित करते हैं, तो आपको और अधिक संकलन की आवश्यकता होती है और यह समझने के लिए कि आपके पहलुओं को कहाँ बुना जाता है, यह कठिन हो सकता है। यहां तक ​​कि वसंत में बुनाई को बंद करना आसान है: वसंत के साथ आप अपने कॉन्फ़िगरेशन से पहलू को हटा दें, पुनः आरंभ करें और यह काम करता है AspectJ में आपको कोड को पुनः कंपाइल करना होगा!

लोड-टाइम बुनाई में, एस्पेक्ज स्प्रिंग के मुकाबले अधिक लचीला है क्योंकि स्प्रिंग एस्पैक्टजे के सभी विकल्पों का समर्थन नहीं करता है। लेकिन मेरी राय में यदि आप बीन की सृजन प्रक्रिया को बदलना चाहते हैं, तो एक बेहतर तरीका यह है कि किसी फैक्ट्री में कस्टम लॉगिन को प्रबंधित करना है, न कि किसी नए पहलू की बुनाई के साथ जो आपके नए ऑपरेटर के व्यवहार को बदलता है।

मुझे आशा है कि एपटेक्ज और स्प्रिंग एओपी के इस पैनोरमिक में आपको दो औषधि के अंतर को समझने में मदद मिलेगी