2012-06-13 20 views
6

मेरे पास एक ऐसा एप्लिकेशन है जिसमें सैमैन नाम के साथ 2 सेम हैं लेकिन विभिन्न पैकेजों में हैं। मेरा वसंत आवेदन विफल रहता है क्योंकि यह तय नहीं कर सकता कि कौन सा बीन लेना है। क्या इसका कोई समाधान है? सेम वर्तमान में विशिष्ट इंटरफेस को लागू नहीं करते ..2 बीन्स एक ही लेकिन अलग पैकेज के साथ, ऑटोवायर कैसे करें?

अपवाद की एक संपादित उदाहरण नीचे देखें: org.springframework.context.annotation.ConflictingBeanDefinitionException: एनोटेशन निर्दिष्ट सेम नाम '

की वजह से सेम वर्ग के लिए dataTransferHandler ' [aaaaa.ws.handler.DataTransferHandler] मौजूदा, गैर संगत सेम एक ही नाम और वर्ग की परिभाषा के साथ संघर्ष [bbbbb.ws.handler.DataTransferHandler]

+0

ऐसा लगता है कि एकमात्र समाधान उन्हें उनके सटीक नाम से संदर्भित करना है। – nhahtdh

उत्तर

12

आपको अपने सेम को अलग-अलग नाम देना होगा - यदि एकाधिक सेम एक ही नाम से परिभाषित किए जाते हैं, तो बाद में परिभाषित एक जिसे पहले परिभाषित किया गया है - तो आपके मामले में केवल 0 बीके नाम से ही एक बीन मौजूद होगा।

आप ताकि दोनों मौजूद कर सकते हैं, अलग-अलग नामों से इन दो सेम दे सकते हैं और आप का उपयोग कर या तो सही में इंजेक्षन कर सकते हैं: @AutoWired @Qualifier("dataTransferHandler") या @Resource(name="dataTransferHandler")

+0

बीन्स को अलग-अलग नाम देकर आप कक्षा का नाम बदलना चाहते हैं? – Marco

+0

नहीं, बीन नाम - यदि आपने स्पष्ट रूप से इसे '' नाम दिया है, या यदि आप एनोटेशन '@ सेवा (" एनाम ") का उपयोग कर रहे हैं। ऐसा लगता है कि आपके मामले में दोनों बीन्स का एक ही नाम है, वे अलग-अलग प्रकार हैं या तो सही –

+0

बिल्कुल सही !!! धन्यवाद मेरे मुद्दों को हल किया !!! सहायता के लिए बहुत - बहुत धन्यवाद! – Marco

0

आप विशेषता दे सकते हैं प्राथमिक = "true" बीन डिफिनेशन के लिए जब आप स्वाभाविक रूप से प्राथमिकता चाहते हैं। लेकिन बीन नाम अलग होना चाहिए। उसी बीन नाम के लिए कोई समाधान नहीं है।

रन-टाइम पर जब आप ऑटोवायर क्लास प्राप्त करेंगे तो प्राथमिक सत्य बीन को ऑटोवॉयरिंग की वरीयता मिलेगी। उम्मीद है कि यह आपकी मदद करता है। चीयर्स।