mvc multiple modelandview form example attribute spring

multiple - Puede crear HashMap con Spring pero no puede crear Mapa



spring jstl (2)

Puedo hacer esto en mi aplicaciónContext con Spring (3.0.5):

<bean id="map" class="java.util.HashMap" scope="prototype" > <constructor-arg> <map key-type="java.lang.String" value-type="java.lang.String"> <entry key="Key 1" value="1" /> <entry key="Key 2" value="2" /> </map> </constructor-arg> </bean>

Y en mi controlador, puedo autorizar mi mapa de esta manera:

@Autowired @Qualifier("map") private HashMap<String, String> map;

Funciona bien, pero si hago esto:

@Autowired @Qualifier("map") private Map<String, String> map;

Lo entiendo:

Causado por: org.springframework.beans.factory.NoSuchBeanDefinitionException: No se ha encontrado ningún bean coincidente de tipo [java.lang.String] para la dependencia [mapa con valor de tipo de tipo java.lang.String]: se espera al menos 1 bean que califica como candidato autowire para esta dependencia. Anotaciones de dependencia: {@ org.springframework.beans.factory.annotation.Autowired (required = true), @ org.springframework.beans.factory.annotation.Qualifier (value = map)}

Mi pregunta es: ¿Por qué no puedo conectar automáticamente mi mapa con la interfaz cuando puedo con la implementación?

Gracias.


Al declarar un bean de colección de tipos, uno no puede inyectarlo a través de @Autowired. Vea abajo la documentación de Spring:

4.11.3 Ajuste automático del autowiring basado en anotaciones con calificadores

Como consecuencia específica de esta diferencia semántica, los beans que se definen a sí mismos como una colección o tipo de mapa no se pueden inyectar a través de @Autowired ya que la coincidencia de tipos no se aplica adecuadamente a ellos. Utilice @Resource para dichos beans, refiriéndose a la colección / bean de mapa específicos por nombre único.

Por lo tanto, en lugar de @Autowired , use @Resource :

@Resource @Qualifier("map") private Map<String, String> map;