मैं एक वर्ग निम्न के समान है:वसंत में एकल @ बीन-एनोटेटेड विधि (या समान) का उपयोग करके एकाधिक सेम कैसे पंजीकृत करें?
@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;
}
}
यह वसंत में संभव है: मैं इस वर्ग के निम्न के समान बनाने के लिए चाहते हैं?
बेशक हाँ। लेकिन आपके पास आवेदन संदर्भ में केवल एक इंजेक्शन योग्य बीन होगा: मानचित्र। –
क्या आप विस्तार से समझा सकते हैं कि आप क्या हासिल करने की कोशिश कर रहे हैं? मैं नहीं देखता कि विभिन्न रिटर्न प्रकारों और नामों के साथ कई @ बीन एनोटेटेड विधियां कैसे एक समस्या है। आदर्श रूप से आप अलग @ कॉन्फ़िगरेशन कक्षाओं में उन @ बीन विधियों को समूहित करेंगे, इसलिए आपके पास संपूर्ण कॉन्फ़िगरेशन रखने वाला एक ईश्वर वर्ग नहीं होगा। परिभाषित @ बीन विधियों का पुन: उपयोग करने के लिए आप विभिन्न कॉन्फ़िगरेशन कक्षाओं को आयात कर सकते हैं। – hovanessyan
मेरे पास भी वही आवश्यकता है। मेरे मामले में, मैं पहली बार फ़ाइल से कॉन्फ़िगरेशन डेटा पढ़ रहा हूं और कॉन्फ़िगरेशन में प्रत्येक प्रविष्टि के लिए, मुझे एक बीन (विभिन्न डेटा के साथ एक ही जावा प्रकार) बनाने की आवश्यकता है। इसलिए मैं @ बीन एनोटेशन का उपयोग नहीं कर सकता, क्योंकि इसे कॉन्फ़िगरेशन – Harish