2016-03-28 7 views
6

मैं एक वर्ग निम्न के समान है:वसंत में एकल @ बीन-एनोटेटेड विधि (या समान) का उपयोग करके एकाधिक सेम कैसे पंजीकृत करें?

@Configuration 
public class ApplicationConfiguration { 

    private <T> T createService(Class<T> serviceInterface) { 
     // implementation omitted 
    } 

    @Bean 
    public FooService fooService() { 
     return createService(FooService.class); 
    } 

    @Bean 
    public BarService barService() { 
     return createService(BarService.class); 
    } 

    ... 

} 

समस्या बहुत से @ बीन-एनोटेट तरीकों जो केवल उनके नाम में मतभेद है, प्रकार और तर्क लौटने crateService विधि कॉल के लिए देखते हैं कि है।

@Configuration 
public class ApplicationConfiguration { 

    private static final Class<?>[] SERVICE_INTERFACES = { 
      FooSerivce.class, BarService.class, ...}; 


    private <T> T createService(Class<T> serviceInterface) { 
     // implementation omitted 
    } 

    @Beans // whatever 
    public Map<String, Object> serviceBeans() { 
     Map<String, Object> result = ... 
     for (Class<?> serviceInterface : SERVICE_INTERFACES) { 
      result.put(/* calculated bean name */, 
        createService(serviceInterface)); 
     } 
     return result; 
    } 

} 

यह वसंत में संभव है: मैं इस वर्ग के निम्न के समान बनाने के लिए चाहते हैं?

+1

बेशक हाँ। लेकिन आपके पास आवेदन संदर्भ में केवल एक इंजेक्शन योग्य बीन होगा: मानचित्र। –

+1

क्या आप विस्तार से समझा सकते हैं कि आप क्या हासिल करने की कोशिश कर रहे हैं? मैं नहीं देखता कि विभिन्न रिटर्न प्रकारों और नामों के साथ कई @ बीन एनोटेटेड विधियां कैसे एक समस्या है। आदर्श रूप से आप अलग @ कॉन्फ़िगरेशन कक्षाओं में उन @ बीन विधियों को समूहित करेंगे, इसलिए आपके पास संपूर्ण कॉन्फ़िगरेशन रखने वाला एक ईश्वर वर्ग नहीं होगा। परिभाषित @ बीन विधियों का पुन: उपयोग करने के लिए आप विभिन्न कॉन्फ़िगरेशन कक्षाओं को आयात कर सकते हैं। – hovanessyan

+0

मेरे पास भी वही आवश्यकता है। मेरे मामले में, मैं पहली बार फ़ाइल से कॉन्फ़िगरेशन डेटा पढ़ रहा हूं और कॉन्फ़िगरेशन में प्रत्येक प्रविष्टि के लिए, मुझे एक बीन (विभिन्न डेटा के साथ एक ही जावा प्रकार) बनाने की आवश्यकता है। इसलिए मैं @ बीन एनोटेशन का उपयोग नहीं कर सकता, क्योंकि इसे कॉन्फ़िगरेशन – Harish

उत्तर

2
@Configuration 
public class ApplicationConfiguration { 

    @Autowired 
    private ConfigurableBeanFactory beanFactory; 

    @PostConstruct 
    public void registerServices() { 
     beanFactory.registerSingleton("service...", new NNNService()); 
     ... 
    } 
} 
+2

कृपया उत्तर के रूप में केवल डंपिंग कोड से बचने का प्रयास करें और यह बताने की कोशिश करें कि यह क्या करता है और क्यों। आपका कोड उन लोगों के लिए स्पष्ट नहीं हो सकता है जिनके पास प्रासंगिक कोडिंग अनुभव नहीं है। – Frits

+0

'@ पोस्टकॉन्स्ट्रक्चर 'को नो-एर्ग विधि की आवश्यकता है। यह मददगार नहीं है यदि आपको बीन्स और गुणों को इंजेक्ट करने की आवश्यकता है – Stewart

+0

बीन्स और गुणों को '@ कॉन्फ़िगरेशन' ऑब्जेक्ट में इंजेक्शन दिए जाने के बाद @ पोस्टकॉन्स्ट्रक्चर 'चलाता है। (और उसके उदाहरण में वह इंजेक्शन बीन फैक्ट्री का भी उपयोग कर रहा है) – Ryan

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