2010-10-08 11 views
29

एनोटेशन का उपयोग करके लुकअप विधि इंजेक्शन का उपयोग करने का कोई तरीका है?एनोटेशन के साथ स्प्रिंग लुकअप विधि इंजेक्शन कैसे करें?

निम्नलिखित वर्ग को देखते हुए: भले ही मैं <context:component-scan base> उपयोग कर रहा हूँ मैं

<bean id="b" class="com.xyz.B"> 
</bean> 

<bean id="a" class="com.xyz.A"> 
    <lookup-method name="createB" bean="b"/> 
</bean> 

:

@Service 
public abstract class A { 


    protected abstract createB(); 

} 

आदेश प्राप्त करने के लिए यह काम करने के लिए मैं वसंत में घोषित करने के लिए निम्नलिखित applicationContext.xml इसे एक्सएमएल में भी घोषित करने के लिए। मुझे लगता है कि एक अच्छा दृष्टिकोण नहीं है।

एनोटेशन के साथ इसे कैसे करें?

उत्तर

28

javax.inject.Provider का उपयोग करना संभव है। सभी धन्यवाद Phil Webb पर जाएं।

public class MySingleton { 

    @Autowired 
    private Provider<MyPrototype> myPrototype; 

    public void operation() { 
    MyPrototype instance = myPrototype.get(); 
    // do something with the instance 
    } 

} 
+1

कृपया नीचे दिए गए @ लुकअप के बारे में भी उत्तर दें - यह वसंत 4.1 के बाद एनोटेशन का उपयोग करने के लिए संभव है। हालांकि मुझे लगता है कि कोड पढ़ने के दौरान प्रदाता बहुत साफ और कम भ्रमित है। – Tarion

13

इसे केवल वसंत> = 4.1 के साथ लागू किया गया है ticket देखें।

+1

स्प्रिंग फ्रेमवर्क 4.1 में यह \ @ लुकअप एनोटेशन के रूप में उपलब्ध है। @ डैनी-दान का जवाब देखें। – HairOfTheDog

+0

धन्यवाद, तदनुसार मेरा जवाब –

17

यह भी org.springframework.beans.factory.ObjectFactory के साथ संभव है क्या आप documentation में अधिक पढ़ सकते हैं

public class MySingleton { 

    @Autowired 
    private ObjectFactory<MyPrototype> myPrototypeFactory; 

    public void operation() { 
    MyPrototype instance = myPrototypeFactory.getObject(); 
    // do something with the instance 
    } 
} 

स्प्रिंग एपीआई के साथ रखना चाहते हैं।

10

अंततः @Lookup एनोटेशन के रूप में पेश किया गया। इसका उपयोग कैसे करें discussion पर है।

+0

@ लुकअप एनोटेशन के लिए स्प्रिंग 4.1 या उसके बाद की आवश्यकता है – HairOfTheDog

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