मान लीजिए, मेरे पास बहुत सी कक्षाएं हैं, जिन्हें जावा प्रतिबिंब (किसी कारण से) का उपयोग करके बनाया गया है। अब मुझे फ़ील्ड में मूल्यों को पोस्ट इंजेक्ट करने की आवश्यकता है, जो @PostInject
के साथ एनोटेटेड हैं।जावा: प्रतिबिंब का उपयोग करके खेतों को इंजेक्ट करने का सबसे तेज़ तरीका क्या है?
public class SomeClass {
@PostInject
private final String someString = null;
public void someMethod() {
// here, someString has a value.
}
}
मेरा प्रश्न है: क्या एक तेजी से प्रतिबिंब का उपयोग कर एक क्षेत्र स्थापित करने के लिए तरीका है?
याद रखें, मुझे इसे कई कक्षाओं में अक्सर करने की ज़रूरत है, यह क्यों प्रदर्शन प्रासंगिक है।
क्या मैं अंतर्ज्ञान द्वारा करना होगा इस छद्म कोड से दिखाया गया है:
- वर्ग
clazz.getFields();
- जांच के सभी क्षेत्रों, जो @PostInject
साथeachField.getAnnotation(PostInject.class);
- एनोटेट मिल इन क्षेत्रों को सुलभ बनाएं
eachAnnotatedField.setAccessible(true);
- उन्हें सेट करें एक निश्चित मूल्य
eachAnnotatedField.set(clazz, someValue);
मुझे डर है कि सभी क्षेत्रों में हो रही करने के लिए सबसे धीमी बात है हूँ।
क्या मुझे कोई क्षेत्र मिल सकता है, जब मैं इसे शुरुआत से जानता हूं?
नोट: मैं कक्षाओं को कुछ इंटरफ़ेस लागू करने की अनुमति नहीं दे सकता, जो किसी विधि का उपयोग करके फ़ील्ड सेट करने की अनुमति देता है। मुझे
POJO की आवश्यकता है।
नोट 2: मैं पोस्ट-फील्ड इंजेक्शन क्यों चाहता हूं: एपीआई उपयोगकर्ता के दृष्टिकोण से, अंतिम फ़ील्ड का उपयोग करना संभव होना चाहिए। इसके अलावा, जब एपीआई द्वारा फ़ील्ड के प्रकार और संख्या को प्राथमिकता नहीं दी जाती है, तो इंटरफ़ेस का उपयोग करके फ़ील्ड प्रारंभिकता प्राप्त करना असंभव है।
NOTE2b: उपयोगकर्ता की दृष्टि से, अंतिम अनुबंध नहीं टूटी हुई है। यह अंतिम रहता है। सबसे पहले, एक फ़ील्ड शुरू हो जाता है, तो इसे बदला नहीं जा सकता है। वैसे: ऐसे कई एपीआई हैं जो इस अवधारणा का उपयोग करते हैं, उनमें से एक जेएक्सबी (जेडीके का हिस्सा) है।
मैं सिर्फ इतना उत्सुक हूं कि आपको ऐसा करने की आवश्यकता क्यों होगी? क्या इस के पीछे एक दिलचस्प कहानी है, और यदि वहां है, तो क्या आप इसे साझा कर सकते हैं? –
मैं एक मार्शेलर लिख रहा हूं | जेएक्सबी के समान unmarshaller, लेकिन अधिक विशेष (इस प्रकार अधिक सीमित)। एनोटेशन के साथ पीओजेओ बस बहुत लचीला है। –
यदि आपको अपनी एनोटेशन का उपयोग करने के लिए कार्यान्वयन करने की आवश्यकता है - आप वास्तव में यहां एक इंटरफ़ेस का उपयोग करने के लिए कुछ भी प्राप्त नहीं कर रहे हैं - और आप वास्तव में POJO का उपयोग नहीं कर रहे हैं - http://en.wikipedia.org/wiki/Plain_Old_Java_Object#Contextual_variations – Nate