2011-12-20 19 views
7

Sto provando a definire un EnumMap in primavera usando. Ho provato le seguenti variazioniCome definire un EnumMap nella primavera 3.0

<util:map map-class="java.util.EnumMap" key-type="xyz.EnumType"> 
<entry key="SOME_ENUM_TYPE"> 
    <ref bean="someBean"/> 
</entry> 
</util:map> 

ottengo il seguente errore

Error creating bean with name 'util:map#1c599b0e': Invocation of init method failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.EnumMap]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.util.EnumMap.<init>() 

La seguente definizione è quello che ho cercato inizialmente

<util:map map-class="java.util.EnumMap"> 
<entry key="SOME_ENUM_TYPE"> 
    <ref bean="someBean"/> 
</entry> 
</util:map> 

e questo mi ha dato qualche errore di non essere in grado di assegna enumtype a String.

Ci sono degli esempi sul sito per usare una mappa generica, ma sto cercando di vedere se posso usare un EnumMap, poiché è considerato il più ottimale per Enum. La risposta potrebbe essere molto ovvia, quindi mi scuso se la domanda è stupida. Ciò è probabilmente dovuto alla mia conoscenza limitata della primavera. Grazie

risposta

12

Immagino che non sia possibile inizializzare EnumMap con <util:map>. Tuttavia, EnumMap ha un costruttore che prende un Map esistente, è possibile provare a usarlo:

<bean class = "java.util.EnumMap"> 
    <constructor-arg> 
     <util:map key-type="xyz.EnumType"> 
      <entry key="SOME_ENUM_TYPE"><ref bean="someBean"/></entry> 
     </util:map> 
    </constructor-arg> 
</bean> 
+0

Grazie per aver funzionato. – Seagull

0

questo problema è perché l'EnumMap non ha il costruttore di default senza argomenti. Spring sarà init senza argomenti, se non esiste sarà errore.

Problemi correlati