2011-12-30 7 views
7

में हुक करते हैं, क्या यह निर्धारित करना संभव है कि कौन से पहलू किसी दिए गए वर्ग में हुक करते हैं और उनके उदाहरणों तक पहुंच प्राप्त करते हैं?निर्धारित करें कि कौन से पहलू किसी दिए गए वर्ग

कुछ की तरह:

Foo foo = new Foo(); 
List<Object> aspects = getAllAspectsOf(foo); 
+0

मुझे यकीन नहीं है कि आप क्या हासिल करने की कोशिश कर रहे हैं। एक बात के लिए, foo का पहलू होने का क्या अर्थ है? शायद आप का मतलब है कि जब कोई सलाह निष्पादित की जाती है, तो 'foo' 'इस()' पॉइंटकट से बाध्य होगा। चूंकि पॉइंटकट्स को गतिशील रूप से बाध्य किया जा सकता है, इसलिए ऐसी कोई भी GetAllAspectsOf (foo) विधि उस धागे पर निर्भर करेगी और सीएफएलओ क्या है। मुझे लगता है कि आपको perthis या pertarget का उपयोग करना चाहिए। फिर फू के दिए गए उदाहरण के लिए, आप MyAspect.aspectOf (foo) को कॉल कर सकते हैं। Http://eclipse.org/aspectj/doc/released/progguide/semantics-aspects.html#aspect-instantiation –

उत्तर

2

सबसे पहले, संभवतः आप मौजूदा पहलू एपीआई का उपयोग करके ऐसी कोई निगरानी नहीं कर पाएंगे, क्योंकि पहलू रैपर जो किसी भी विशेष घटक से बंधे न होने के विशिष्ट उद्देश्य से कॉल को रोकते हैं, इसलिए कोई भी नहीं होगा अवरोधक पहलुओं का पता लगाने का प्राकृतिक तरीका।

यह कहा गया - एक तरीका हो सकता है कि आप किसी प्रकार की रणनीति वर्ग के अंदर पहलुओं को लपेट सकें, हालांकि, इसे बनाए रखने के लिए काम की मात्रा काफी महत्वपूर्ण होगी।

http://www.eclipse.org/aspectj/doc/released/faq.php#q:benefits

पहलुओं अक्सर के रूप में या रनटाइम पर अपने अन्य कोड, अर्थात "साथ में बुना" या निर्माण समय "के शीर्ष पर जा रहा है" बताया गया है।

http://asm.ow2.org/users.html

इस प्रकार, अपने कोड नहीं आम तौर पर किसी भी तरह के पहलू उन्मुख सुविधाओं के "पता", होगा पहलुओं के कार्यान्वयन के लिए इस प्रतिमान दिया।

हालांकि, अगर आप मिल पहलुओं चाहता था, आप कुछ पहलू को लागू कर सकता है मानक जावा और निर्भरता इंजेक्शन का उपयोग करते हुए "की तरह" -, जो है लोड हो रहा है इंजेक्शन कार्यावधि में मॉड्यूल जो पार काटने कार्यक्षमता के कुछ लागू द्वारा कि एक पहलू लागू होगा ... लेकिन, मुझे संदेह है, यदि आप वास्तव में गंभीर पहलू उन्मुख कोड कर रहे हैं, तो ऐसा दृष्टिकोण आपके पहलू उन्मुख आवश्यकताओं से कम हो जाएगा।

2

मुझे नहीं लगता कि आप कर सकते हैं कि, हालांकि, यह प्रौद्योगिकी निर्भर होगा। जहां तक ​​मुझे पता है, वर्ग के चारों ओर बुने गए सलाह को ट्रैक करने और एक्सेस करने के लिए पहलू या सीजीएलआईबी के साथ कोई रास्ता नहीं है। आप अपनी सलाह बना सकते हैं जैसे कि यह स्वयं को कुछ थ्रेड स्थानीय संरचना में संदर्भ जोड़ देगा जिसे सलाह दी गई कक्षा द्वारा एक्सेस किया जा सकता है। हालांकि, यदि आप अपने लक्षित वर्गों को जोड़ते हैं तो यह चिंता काटने को रोकने के लिए एक समाधान के रूप में पहलुओं के उद्देश्य को हराने के लिए प्रतीत होता है।

+0

देखें I लक्ष्य वर्ग को पहलू को जोड़े जाने का इरादा नहीं है। इसके बजाय मैं लक्ष्य वर्ग और रणनीति वर्ग के साथ एक रणनीति वर्ग प्रदान करना चाहता हूं, फिर कुछ श्रोता पंजीकृत करने के लिए लक्षित वर्ग पर परिभाषित पहलू तक पहुंचने की आवश्यकता है। लक्ष्य वर्ग असम्बद्ध है ... केवल रणनीति वर्ग के पहलू के बारे में ज्ञान है। – mibollma

+0

@ मिबोलमा: क्या आपके पास सलाहकार रजिस्टर करने वाला सलाह हो सकती है, जिससे आप लक्ष्य उदाहरण को रणनीति प्रदान कर सकते हैं? – philwb

0

मुझे लगता है कि कुछ सीमित जानकारी प्राप्त करने के लिए को वीवर बदलने के लिए इसकी आवश्यकता होगी, इसलिए यह इसके काम के कुछ लॉग को बढ़ाए गए वर्ग में सहेजता है, ताकि आप इसे बाद में पढ़ सकें। लेकिन ज्यादा उम्मीद न करें - AFAIK पहलू कोई रन-टाइम प्रकार के रूप में मौजूद नहीं हो सकते हैं। मुझे आश्चर्य है - क्या ऐसा कोई ढांचा है?