2012-09-07 8 views
17

मेरे पास एक वसंत नक्शा समस्या है जो मुझे आँसू ला रही है।उपयोग: वसंत में नक्शा नक्शा प्रकार के हर बीन को चुनने

मेरे वसंत इस तरह दिखता है:

<?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:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd 
    "> 

    <util:map id="mockMap"> 
     <entry key="userTest1" value="test1"/> 
     <entry key="userTest2" value="test2"/> 
     <entry key="userTest3" value="test6"/> 
    </util:map> 
</beans> 

तो कोड जहां मैं इस प्रकार है autowiring हूँ (अप्रासंगिक भागों लोप):

@Autowired 
@Resource(name="mockMap") 
Map<String, String> testMap; 

@Test 
public void testGetGearListActivityOK() { 
    for (String key : testMap.keySet()) { 
     System.out.println("key = " + key); 
    } 
} 

आश्चर्यजनक पर्याप्त, यह वास्तव में मुझे एक दे देंगे ऑटोवॉयरिंग चरण पर त्रुटि कह रही है कि कोई बीन्स मिलान प्रकार स्ट्रिंग नहीं है।

[junit] key = mockMap 
[junit] key = org.springframework.context.annotation.internalConfigurationAnnotationProcessor 
[junit] key = org.springframework.context.annotation.internalAutowiredAnnotationProcessor 
[junit] key = org.springframework.context.annotation.internalRequiredAnnotationProcessor 
[junit] key = org.springframework.context.annotation.internalCommonAnnotationProcessor 
[junit] key = systemProperties 
[junit] key = systemEnvironment 
[junit] key = messageSource 
[junit] key = applicationEventMulticaster 
[junit] key = lifecycleProcessor 

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

मैं यहां इतनी उलझन में हूं और अतीत में एक सभ्य राशि वसंत का उपयोग किया है। अगर किसी के पास कोई सुराग है कि बिल्ली यहाँ क्या चल रहा है, तो मैं बहुत आभारी हूं।

अग्रिम धन्यवाद।

इसके अलावा, मैं इस सवाल को देखा: Auto-wiring a List using util schema gives NoSuchBeanDefinitionException

लेकिन समाधान वहाँ @Resource है, जो मैं पहले से ही कर रहा हूँ उपयोग करने के लिए है ..

उत्तर

23

निकालें @Autowired और केवल @Resource (नाम का उपयोग = " mockMap अपने config

+3

ऑटोवायर संसाधन को ओवरराइड कर रहा है और इसलिए वसंत वसंत संदर्भ होने वाला पहला मानचित्र ऑब्जेक्ट ढूंढ रहा है। यही कारण है कि आप कुंजी के रूप में वर्णित कुंजी प्राप्त करते हैं। – dennisjtaylor

+1

असल में क्या हो रहा है कि यदि आप किसी भी संग्रह पर @Autowired का उपयोग करते हैं तो यह किसी भी बीन की तलाश करेगा जो आपके क्वालीफायर से मेल खाता है (या उस प्रकार के सभी बीन्स यदि आपके पास क्वालीफायर नहीं है) और उन्हें संग्रह में जोड़ें। यदि आपके पास उस प्रकार के किसी भी बीन्स नहीं हैं तो आपको उस ऑब्जेक्ट की ऑटोवॉयरिंग के दौरान "कोई बीन्स नहीं मिला, कम से कम एक अपेक्षित" अपवाद मिलेगा। – Craig

+0

आज मैंने इस पर 3 घंटे बिताए :( – Nayn

0

केवल @Resource और परिवर्तन का उपयोग करें "आप ऐसा एक संग्रह autowire नहीं कर सकते।

हालांकि, अगर आप इन की कोशिश कर सकते हैं:

@Resource(name="mockMap") 
private Map<String, String> testMap; 

या यहाँ तक कि:

@Value("#{mockMap}") 
private Map<String, String> testMap; 

चेक spring docs, टिप्स अनुभाग:

सेम कि खुद एक संग्रह के रूप में परिभाषित कर रहे या नक्शा प्रकार @Autowired के माध्यम से इंजेक्शन नहीं किया जा सकता है, क्योंकि प्रकार मिलान ठीक से नहीं है उनके लिए लागू है। इस बीन्स के लिए @Resource का उपयोग करें

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