2013-01-04 16 views
5

का उपयोग किए बिना प्रोटोटाइप स्कोप के साथ स्प्रिंग बीन को पुनर्प्राप्त करना संभव है। अगर मैं प्रोटोटाइप स्कोप के साथ एक बीन पुनर्प्राप्त करना चाहता हूं (यानी मैं हर बार कक्षा का एक अलग उदाहरण चाहता हूं), क्या एप्लिकेशनकॉन्टेक्स्टवेयर वर्ग का उपयोग किए बिना बीन को पुनर्प्राप्त करना संभव है?स्प्रिंग 3.1 का उपयोग कर अनुप्रयोगकॉन्टेक्स्टवेयर

यह कैसे मैं वर्तमान

@Component 
@Qualifier("MyService") 
public class MyServiceImpl implements MyService { 

    @Override 
    public void doSomething() { 
     Blah blah = (Blah)ApplicationContextProvider.getContext().getBean("blah"); 
     blah.setThing("thing"); 
     blah.doSomething(); 
    } 
} 


@Component("blah") 
@Scope("prototype") 
public class Blah { 
    .... 
} 

जहां ApplicationContextProvider लागू करता ApplicationContextAware पर यह करना है।

क्या यह एप्लिकेशनकॉन्टेक्स्टवेयरवेयर क्लास का उपयोग किए बिना एनोटेशन या सरल स्प्रिंग कॉन्फ़िगरेशन के साथ ऐसा करना संभव है?

उत्तर

1

वसंत को प्राप्त करने के लिए क्या आप के बाद कर रहे हैं के लिए काफी कुछ sophosticated तरीकों है ...

वसंत दस्तावेज़ देखें: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection

वसंत प्रॉक्सी गुंजाइश के लिए खोज पर गूगल भी कुछ परिणाम फेंक दिया ...

+2

हाँ, मुझे लगता है कि मैं यही देख रहा हूं। यह SO प्रश्न बताता है कि एनोटेशन के साथ इसे कैसे किया जाए: http://stackoverflow.com/questions/4503606/annotation-equivalent-of-aopscoped-proxy – CodeClimber

0

आपको वास्तव में ApplicationContextAware की आवश्यकता नहीं है। आपको बस एक बीनफैक्टरी की आवश्यकता है (एप्लिकेशनकॉन्टेक्स्टवेयर इसे प्राप्त करने का एक निश्चित तरीका है)।

स्कोप प्रोटोटाइप के साथ एक बीन का मतलब है कि हर बार ApplicationContext.getBean को बीन का एक नया उदाहरण कहा जाता है। यदि आप एक सिंगलटन में प्रोटोटाइप बीन इंजेक्ट करने का प्रयास करते हैं, तो आपके प्रोटोटाइप बीन को इंजेक्शन दिया जाएगा (और इसलिए कोई प्रोटोटाइप नहीं है)।

कुछ ऐसा है जिसे method injection कहा जाता है जो आपको वास्तव में इसकी आवश्यकता होने पर आपकी सहायता कर सकता है, लेकिन यह एप्लिकेशन कॉन्टेक्स्ट.getBean() को कॉल करने से कहीं अधिक जटिल है।

+0

प्रतिक्रिया के लिए धन्यवाद। मैं किसी स्प्रिंग विशिष्ट जावा को लिखने से दूर होने की कोशिश कर रहा हूं, यह एप्लिकेशनकॉन्टेक्स्टवेयर को कार्यान्वित कर रहा है या बीनफैक्टरी का उपयोग कर रहा है। – CodeClimber

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