2010-01-15 8 views
5

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

+0

क्या आपके पास कस्टम क्लासलोडर के स्रोत तक पहुंच नहीं है? – stacker

उत्तर

2

एक ClassFileTransformer रजिस्टर। बाइट्स को संशोधित करने के बजाय, आपको आवश्यक डेटा रिकॉर्ड करें।

+1

हाँ, हम वास्तव में कुछ हफ्ते पहले ऐसा कर रहे थे। यह काम करता हैं। – user66237

3

यदि आप कस्टम क्लासलोडर को अपने आप से बदलते हैं, तो आप कच्चे बाइट्स को स्वयं सहेजने के लिए कुछ तंत्र जोड़ सकते हैं।

0

क्लासलोडर में कक्षाएं defineClass() विधि द्वारा बनाई गई हैं। यदि आपके पास पहले से एक कस्टम क्लासलोडर है तो आप बस सभी defineClass() विधियों को ओवरराइड कर सकते हैं। उस विधि के लिए आपको कक्षा के बाइट युक्त बाइट [] पारित किया जाता है। इन्हें स्टोर करें और आप बाद में उन तक पहुंच सकते हैं हालांकि आपको अपने आवेदन की आवश्यकता है।

अधिक जानकारी के लिए [defineClass() जावा दस्तावेज़ीकरण] [1] देखें।

[1]: http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String, बाइट [], int, int)

+0

सभी defineClass विधियां अंतिम हैं। –