2012-09-07 21 views
17

Ben bir gözyaşı bana getiren bir Bahar harita sorunum var.kullanımlar: harita, harita türünün her fasulyesini toplayarak ilkbaharda

Benim bahar şöyle görünür:

<?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> 

Sonra şöyle şudur Autowiring am kodu (ilgisiz parçalar ommitted):

Şaşırtıcı ki
@Autowired 
@Resource(name="mockMap") 
Map<String, String> testMap; 

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

, bu aslında bana bir verecek Otomatik kablolama adımında, çekirdekle eşleşen tipte bir String olmadığını belirten bir hata. Henüz giriş anahtar bölümü almanız mümkün olmamıştır

[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 

: Ben birim testinde haritası Harita olarak tanımlanabilir değiştirmek Ancak, o zaman takip çıktısını almak aslında bir anahtar olarak ortaya çıkıyor. Haritayı Haritaya geri döndürüp, ilkbaharıma biraz eklerseniz, harita, kimliklerini tuşlar olarak kullananlarla doldurulur.

Burada çok kafam karışık ve geçmişte iyi bir miktar bahar kullandım. Herkesin burada neler olduğu hakkında bir ipucu varsa çok minnettar olurum.

Şimdiden teşekkürler. "= Auto-wiring a List using util schema gives NoSuchBeanDefinitionException

Ama zaten yapıyorum @Resource kullanımı yoktur çözümü ..

cevap

23

@Autowired çıkarın ve sadece @Resource (adını kullanın:

Ayrıca, bu soruyu gördü mockMap böyle bir koleksiyon autowire edemez config

+3

Otomatik Kablolu, Kaynak'ı geçersiz kılar ve bu nedenle Bahar, bahar içeriği olan ilk Harita nesnesini arar. Bu yüzden çıkış olarak bahsettiğin anahtarı aldın. – dennisjtaylor

+1

Gerçekte, herhangi bir koleksiyonda @Autowired kullanırsanız, niteleyicinizle eşleşen herhangi bir fasulyeyi (veya niteleyiciniz yoksa bu türdeki bütün fasülyeleri) arayacak ve bunları koleksiyona ekleyeceksiniz. Bu türden çekirdekleriniz yoksa, o nesnenin otomatik olarak yüklenmesi sırasında "fasulye bulunamaz, en az bir beklenen" istisnası alırsınız. – Craig

+0

bugün bu konuda 3 saat geçirdim :( – Nayn

0

sadece @Resource ve değişim kullan".

Ancak, bu deneyebilirsiniz: hatta

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

ya:

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

Kontrolü spring docs, ipuçları bölümü: kendilerini bir koleksiyon olarak tanımlanır

fasulye veya eşleme türü 'un @Outowired üzerinden enjekte edilemez, çünkü tür eşleşmesi düzgün değil bunlara uygulanabilir. @Bu tür çekirdekler için @Resource kullanın.

0

yılında testMap "den "mockMap"")