स्प्रिंग डॉक्स की धारा 3.4.4.5 इसे बहुत अच्छी तरह से समझाती है:
(कृपया ध्यान दें कि निम्नलिखित 'उपयोगकर्ताप्रभारी' की परिभाषा के अनुसार यह अपूर्ण है):
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>
उपरोक्त विन्यास से यह स्पष्ट होता है कि सिंगलटन बीन 'userManager' को HTTP सत्र-स्कॉप्ड बीन 'userPreferences' के संदर्भ में इंजेक्ट किया जा रहा है। यहाँ मुख्य बिंदु यह है कि 'userManager' बीन एक सिंगलटन है ... यह कंटेनर के अनुसार एक बार बिल्कुल ठीक किया जाएगा , और इसकी निर्भरता (केवल इस मामले में, 'userPreferences' सेम) को केवल एक बार (एक बार ) इंजेक्ट किया जाएगा! ) का है ।
इसका मतलब यह है कि 'userManager' (वैचारिक रूप से) कभी भी केवल उसी 'userPreferences' ऑब्जेक्ट पर काम करता है, वह वही है जिसे मूल रूप से इंजेक्ट किया गया था।
यह वह नहीं है जो आप चाहते हैं कि जब आप एक HTTP सत्र-स्कैन की हुई बीन को एक सहयोग वस्तु (आमतौर पर) में निर्भरता के रूप में इंजेक्ट करते हैं। बल्कि, हम जो चाहते हैं, वह प्रति कंटेनर एक एकल 'उपयोगकर्ता प्रबंधक' ऑब्जेक्ट है , और फिर, एक HTTP सत्र के जीवनकाल के लिए, हम एक 'उपयोगकर्ताप्रबंध' ऑब्जेक्ट को देखना और उपयोग करना चाहते हैं जो HTTP सत्र के लिए विशिष्ट है ।
इसके बजाय आपको जो कुछ भी चाहिए वह किसी प्रकार की वस्तु को इंजेक्ट करना है जो सटीक सार्वजनिक इंटरफ़ेस को UserPreferences वर्ग के रूप में उजागर करता है (आदर्श रूप से एक ऑब्जेक्ट जो कि UserPreferences उदाहरण है) और यह स्मार्ट होने के लिए पर्याप्त है और वास्तविक UserPreferences ऑब्जेक्ट को लाने में सक्षम है जो भी अंतर्निहित स्कूपिंग तंत्र हमने चुना है (HTTP अनुरोध, सत्र, आदि) से। फिर हम इस प्रॉक्सी ऑब्जेक्ट को 'userManager' बीन में सुरक्षित रूप से इंजेक्ट कर सकते हैं, जो इस बात से अनजान होगा कि UserPreferences संदर्भ जो इसे पकड़े हुए है वह प्रॉक्सी है ।
हमारे मामले में, जब एक UserManager उदाहरण निर्भरता-इंजेक्ट किए गए UserPreferences ऑब्जेक्ट पर एक विधि का आह्वान करता है, तो यह वास्तव में प्रॉक्सी पर एक विधि को लागू करेगा ... प्रॉक्सी तब बंद हो जाएगा और वास्तविक UserPreferences ऑब्जेक्ट (इस मामले में) से प्राप्त करेगा। HTTP सत्र, और पुनः प्राप्त वास्तविक UserPreferences ऑब्जेक्ट पर विधि मंगलाचरण को सौंपें।
इसीलिए आपको अनुरोध करते समय निम्न, सही और पूर्ण, कॉन्फ़िगरेशन की आवश्यकता होती है- सहयोग सत्र, और- GlobalSession-scoped सेम को सहयोग करने वाली वस्तुओं में:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
<aop:scoped-proxy/>
</bean>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>