2011-08-10 9 views
16

की प्रत्येक कॉल के लिए सेम का नया उदाहरण बना रहा है: Connection manager हर बार ConnectionServer में से एक वस्तु और DataBean तो की नई वस्तुओं होना चाहिए, मैं इन सेम बनाया है और वह वसंत एक्सएमएल बाहर कॉन्फ़िगर किया है ।स्प्रिंग: अगले स्थिति प्राप्त विधि

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <bean id="dataBena" class="com.test.DataBean" scope="prototype"/> 
    <bean id="servCon" class="com.test.ServerCon"/> 
    <!--<bean id="test" class="com.test.Test"/>--> 
    <context:component-scan base-package="com.test"/> 
</beans> 

और के लिए DataBean

गुंजाइश prototype जोड़ा इस के बाद मैं util/घटक वर्ग कहा जाता टेस्ट

@Component 
public class Test { 

    @Autowired 
    private DataBean bean; 
    @Autowired 
    private ServerCon server; 

    public DataBean getBean() { 
     return bean.clone(); 
    } 

    public ServerCon getServer() { 
     return server; 
    } 

} 

लेकिन, getBean() विधि मैं क्लोनिंग कर रहा हूँ बुलाने की हर बार सरल बना लिया है यह बीन, और यह मेरी समस्या है। क्या मैं इसे क्लोन कॉन्फ़िगरेशन से क्लोन विधि के बिना कर सकता हूं? धन्यवाद।

उत्तर

32

आप वसंत में lookup method कार्यक्षमता की तलाश में हैं।

@Component 
public abstract class Test { 
    public abstract DataBean getBean(); 
} 

और स्प्रिंग बताते हैं कि यह क्रम में इसे लागू करना चाहिए:: विचार यह है कि आप इस तरह से एक सार विधि प्रदान करना है

<bean id="test" class="com.test.Test"> 
    <lookup-method name="getBean" bean="dataBean"/> 
</bean> 

अब हर बार जब आप फोन Test.getBean आप वास्तव में फोन करेगा वसंत-उत्पन्न तरीका। यह विधि उदाहरण के लिए ApplicationContext से पूछेगी। यदि यह बीन prototype -स्कोप है, तो हर बार जब आप इसे कॉल करेंगे तो आपको नया उदाहरण मिलेगा।

मैंने इस सुविधा के बारे में here लिखा था।

+1

बस अपने क्लासस्पैट में [cglib.jar] (http://repo1.maven.org/maven2/cglib/cglib/2.2.2/cglib-2.2.2.jar) जोड़ें। –

+0

और asm-all-3.3.1.jar भी :), धन्यवाद सब अच्छा काम करता है! –

+0

यदि आप 'डेटाबीन' एक सामान्य है और यदि उसके अंदर '' प्रकार के आधार पर '@ Autowired' है, तो 'सेवा ' है, तो आप इसे कैसे संभालेंगे? –

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