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;
Trate de usar @Resource
lugar de @Autowired
@Resource(name="map")
private HashMap<String, String> map;
Consulte la sugerencia en 3.9.3 Ajuste automático de anotaciones automáticas basadas en anotaciones con calificadores de la documentación de Spring