2008-10-23 14 views
20

मैं कुछ समय के लिए वसंत का उपयोग कर रहा हूं, लेकिन मैं हमेशा सोचता हूं कि यह कैसे काम करता है, अधिक विशेष रूप से, वे कैसे लोड करते हैं और बुनाई बीन्स/कक्षाएं केवल इंटरफ़ेस या @ एनोटेशनस्प्रिंग फ्रेमवर्क और अन्य आईओसी कंटेनर के आंतरिक

एक्सएमएल घोषणाओं के लिए, यह देखना आसान है कि कैसे वसंत मेरे बीन्स को प्रीप्रोकैस करता है (उन्हें एक्सएमएल संदर्भ में घोषित किया जाता है जो वसंत पढ़ता है), लेकिन केवल एनोटेशन के साथ चिह्नित वर्गों के लिए, मैं नहीं देख सकता कि यह कैसे काम करता है मैं किसी भी एजेंट को jvm या तो पास नहीं करता हूं।

मुझे विश्वास है कि कुछ जावा/जेवीएम हुक है जो आपको कुछ प्रकार के मानदंडों से कक्षाओं को प्रीप्रोसेस करने की अनुमति देता है, लेकिन मैं दस्तावेज़ों पर कुछ भी नहीं ढूंढ पाया।

क्या कोई मुझे कुछ दस्तावेज़ों में इंगित कर सकता है? क्या यह java.lang.instrument.ClassFileTransformer एपीआई से संबंधित है?

उत्तर

28
डिफ़ॉल्ट स्प्रिंग द्वारा वास्तव में

किसी भी बाईटकोड न XML- के लिए, और न ही एनोटेशन-विन्यस्त सेम postprocessing नहीं करता है। इसके बजाय प्रासंगिक बीन्स गतिशील प्रॉक्सी में लपेटे गए हैं (उदाहरण के लिए java.lang.reflect.Proxy जावा एसडीके में देखें)। डायनामिक प्रॉक्सी वास्तविक ऑब्जेक्ट्स को लपेटते हैं जो विधि कॉल को अवरुद्ध करते हैं, जो एओपी सलाह लागू करने की अनुमति देते हैं। अंतर यह है कि प्रॉक्सी फ्रेमवर्क द्वारा बनाए गए अनिवार्य रूप से नए कृत्रिम वर्ग हैं, जबकि बुनाई/बाइटकोड पोस्टप्रोकैसिंग मौजूदा लोगों को बदलती है। बाद में आपके द्वारा उल्लिखित इंस्ट्रुमेंटेशन एपीआई का उपयोग किए बिना असंभव है।

एनोटेशन के लिए, <context:component-scan> टैग के कार्यान्वयन स्प्रिंग एनोटेशन के साथ सभी कक्षाओं के लिए कक्षापंथियों को स्कैन करेगा और उनके लिए स्प्रिंग मेटाडेटा प्लेसहोल्डर्स बनाएगा। उसके बाद उन्हें इस तरह माना जाता है कि वे एक्सएमएल के माध्यम से कॉन्फ़िगर किए गए थे (या अधिक विशिष्ट होने के लिए दोनों का इलाज किया जाता है)।

हालांकि वसंत बाइटकोड पोस्टप्रोकैसिंग स्वयं नहीं करता है, लेकिन आप एस्पेक्टजे बुनाई एजेंट को कॉन्फ़िगर कर सकते हैं जो स्प्रिंग के साथ ठीक काम करना चाहिए, अगर प्रॉक्सी आपको संतुष्ट नहीं करते हैं।

+0

धन्यवाद, महान जवाब! मैं थोड़ी परेशान था कि वसंत या कोई अन्य ढांचा मेरे वर्गों को कंटेनर में आपूर्ति किए बिना कैसे पहुंचा सकता है, लेकिन अब यह समझ में आता है :) –

+0

मुझे यह इंगित करना चाहिए कि प्रॉक्सी के उपयोग का अर्थ है कि आपको वसंत का उपयोग करने के लिए इंटरफेस को कोड करना होगा बुनाई के बिना (प्रॉक्सी केवल इंटरफेस के साथ काम करता है) –

+1

नहीं। जेडीके प्रॉक्सी केवल इंटरफेस के साथ काम करते हैं, सीजीएलआईबी प्रॉक्सी सामान्य कक्षाओं के साथ भी काम करते हैं। –

1

The Spring Framework download स्रोत कोड के साथ बंडल आता है, इसलिए आप पता लगाने के लिए कोड (src फ़ोल्डर के अंदर) पर एक चोटी लेने के लिए स्वतंत्र हैं।

The reference manual भी काफी लंबा है (588 पेज यदि आप इसे as a PDF डाउनलोड करते हैं)।

+3

धन्यवाद, लेकिन मैं वसंत स्रोत में डाइविंग नहीं करने का एक तरीका ढूंढ रहा था ... वैसे भी पीडीएफ वसंत के आंतरिक भाग का उल्लेख नहीं करता है। –

+0

मुझे समझ में नहीं आता कि यह क्यों कम हो गया है! –

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