2011-11-25 13 views
7

क्या किसी कोड या किसी वर्ग के सभी उदाहरणों को उनके कोड को संशोधित किए बिना विधि निष्पादन को सुनना संभव है? कुछ की तरह:क्या किसी अन्य वर्ग 'विधि निष्पादन को सुनने का कोई तरीका है?

someInstance.addMethodExecutionListener('methodName', handler); 
SomeClass.addMethodExecutionListener('methodName', handler); 

यह प्रवेश के प्रयोजनों के लिए किया जाएगा ...

+0

तो आप क्या चाहते हैं। क्या आपको प्रत्येक बार 'methodName()' निष्पादन शुरू होने पर अधिसूचित करने की आवश्यकता है? –

+0

बिल्कुल, और कक्षा कोड को संशोधित किए बिना। –

उत्तर

5

आपके बारे में क्या कह रहे हैं आप पहलू उन्मुख प्रोग्रामिंग के साथ क्या कर सकते हैं के एक छोटे सबसेट है। यह सादा जावा और इसके कार्यान्वयन में समर्थित नहीं है, लेकिन यह AspectJ का मुख्य कारण है।

2

पर्यावरण के आधार पर आप विभिन्न तकनीकों का उपयोग कर सकते हैं। वसंत Aspects प्रदान करता है कि आप कुछ घटनाओं (जैसे विधि निष्पादन) से जुड़ सकते हैं।

यदि आप जावा ईई कंटेनर प्रबंधित वातावरण में हैं तो आप वेब सेवाओं के लिए ईजेबी या SoapHandlers के लिए Interceptors का उपयोग कर सकते हैं।

0

टूलिंग एपीआई, जेवीएमटीआई का उपयोग करना एक तरीका है (अलग डीबगिंग और प्रोफाइलिंग एपीआई को प्रतिस्थापित करता है)।

अन्यथा, आप विधि कोड से पहले अपना कोड डालने के लिए कक्षा फ़ाइलों को फिर से लिख सकते हैं। यह जरूरी नहीं है। एएसएम कम स्तर पर बाइटकोड मैनिपुलेशन के लिए अच्छा है, लेकिन हो सकता है कि आप कुछ लाइब्रेरी (या अपना खुद का लिखें) का उपयोग करना चाहें या संभवतः कुछ "पहलू" टूल का उपयोग करें।

बाइटकोड को लोड करने से पहले "डिस्क पर" आसानी से लिखा जा सकता है, या कमांड लाइन पर instrumentation API और -javaagent: का उपयोग करके रनटाइम पर आसानी से लिखा जा सकता है।

संबंधित मुद्दे