Alternatives to java.lang.reflect.Proxy for creating proxies of abstract classes (rather than interfaces) -
के अनुसार:
[
java.lang.reflect।]प्रॉक्सीगतिशील प्रॉक्सी वर्गों और उदाहरणों को बनाने के लिए स्थिर तरीके प्रदान करता है, और यह उन तरीकों के द्वारा बनाए गए सभी डायनामिक प्रॉक्सी वर्गों का सुपर वर्ग भी है।
गतिशील प्रॉक्सी पैदा करने के लिए जिम्मेदार) निम्नलिखित हस्ताक्षर हैं:
सार्वजनिक स्थिर वस्तु newProxyInstance (classloader लोडर, कक्षा & lt; & gt; [] इंटरफेस, InvocationHandler ज) फेंकता IllegalArgumentExceptionपूर्व>दुर्भाग्यवश, यह एक गतिशील प्रॉक्सी उत्पन्न करने से रोकता है, जो विस्तारित एक विशिष्ट सार वर्ग ( को लागू करने विशिष्ट इंटरफेस के बजाय) यह समझ में
java.lang.reflect.Proxyहै "सभी गतिशील प्रॉक्सी के सुपर क्लास", जिससे अन्य वर्ग सुपर क्लास होने से रोकने पर विचार बनाता है।इसलिए, कर रहे हैं वहाँ किसी भी
java.lang.reflect.Proxyके लिए विकल्प है कि गतिशील प्रॉक्सी इनहेरिट एक विशिष्ट सार वर्ग से उत्पन्न कर सकते हैं, सार के लिए सभी कॉल पुनः निर्देशित तरीकों उदाहरण के लिए, मान लें कि मेरे पास एक अमूर्त वर्गकुत्ते:सार्वजनिक अमूर्त वर्ग डॉग {सार्वजनिक शून्य छाल () {System.out.println ("वाह!"); } सार्वजनिक सार शून्य फेच (); }वहाँ एक वर्ग है कि मुझे करने की अनुमति देता है निम्नलिखित
कुत्ता कुत्ता = SomeOtherProxy.newProxyInstance (classloader, Dog.class, ज); dog.fetch (); // अभिलेख संचालक dog.bark () द्वारा संभाला जाएगा; // अभिविन्यास हेन्डलर द्वारा नियंत्रित नहीं किया जाएगा
इसका उपयोग किया जा सकता है (देखें ) या
एडम उदाहरण Javassist का उपयोग कर:।
मैं (एडम पेंटर) इस कोड को Javassist का उपयोग कर लिखा है:
प्रॉक्सीफैक्टर कारखाना = नया प्रॉक्सीफैक्टर (); factory.setSuperclass (Dog.class); Factory.setFilter (नया मेथडफिल्टर () {@ ओवरराइड पब्लिक बूलियन हैडल किया गया है (विधि विधि) {वापसी संशोधक.आईएसएब्राफ्ट (विधि.गेटएमॉडीफ़ियर्स ());}}); MethodHandler हैंडलर = नए MethodHandler () {@Override सार्वजनिक वस्तु आह्वान (वस्तु स्वयं, विधि thisMethod, विधि, वस्तु आगे बढ़ना [] args) फेंकता फेंकने योग्य {println ( "हैंडलिंग" + thisMethod + "विधि हैंडलर के माध्यम से") ; वापसी नल; }}; डॉग डॉग = (डॉग) फैक्ट्री.क्रेतेट (नया क्लास & lt;? & Gt; [0], नया ऑब्जेक्ट [0], हैंडलर); कुत्ते का भौंकना(); dog.fetch (); जो इस आउटपुट का उत्पादन करता है:
<पूर्व> वाह! विधि हैंडलर के माध्यम से सार्वजनिक सार शून्य नकली.डॉग.फेट () को संभालना
Comments
Post a Comment