2011-12-20 16 views
7

He estado tratando de definir un EnumMap en Spring usando. Probé los siguientes variacionesCómo definir un EnumMap en Spring 3.0

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

me sale el siguiente error

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 siguiente definición es lo que he intentado inicialmente

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

y esto me dio un error de no poder asigna el enumtype a String.

Hay ejemplos en el sitio para usar un mapa genérico, pero estoy tratando de ver si puedo usar un EnumMap, ya que se considera el más óptimo para los Enumerados. La respuesta puede ser muy obvia, así que mis disculpas si la pregunta es estúpida. Esto es probablemente debido a mi conocimiento limitado de Spring. Gracias

Respuesta

12

Supongo que no puede inicializar EnumMap con <util:map>. Sin embargo, EnumMap tiene un constructor que toma un Map existente, se puede tratar de 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

Gracias esto funcionó para mí. – Seagull

0

Este problema se debe a que la EnumMap no tiene el constructor por defecto sin ningún argumento. El resorte será init sin ningún argumento, si no existe habrá error.

Cuestiones relacionadas