tutorial sts framework java spring

java - sts - spring wikipedia



Cómo inyectar un mapa<String, List> en java springs? (5)

¿Cómo inyectar un mapa en el marco de primavera de java? Si es posible, proporcione un código de muestra.

Es el siguiente legal?

<property name="testMap"> <map> <entry> <key> <value>test</value> </key> <value> <list> <value>String</value> <value>String</value> </list> </value> </entry> </map> </property>


Acabo de toparme con este caso yo mismo. Si no es necesario reutilizar los valores de la lista como beans independientes en otro lugar, puede usar esta versión más corta, sin usar ''value-ref'':

<util:map id="mymap"> <entry key="key1"> <util:list> <value>val1</value> <value>val2</value> </util:list> </entry> <entry key="key2"> <util:list> <value>val2</value> <value>val3</value> <value>val4</value> </util:list> </entry> </util:map>

Y, conéctelo en su código Java de esta manera:

@Resource(name="mymap") Map<String, List<String>> mapKey_List;


Creo que su sintaxis no es legal ya que Spring lanza org.xml.sax.SAXParseException al procesar la configuración de bean xml.

Debería funcionar después de eliminar la etiqueta <value> alrededor de la <list> .

<property name="testMap"> <map> <entry> <key> <value>test</value> </key> <list> <value>String</value> <value>String</value> </list> </entry> </map> </property>


Defina un Mapa como este primero dentro de su applicationContext.xml :

<util:list id="list1"> <value>[email protected]</value> <value>[email protected]</value> </util:list> <util:list id="list2"> <value>[email protected]</value> <value>[email protected]</value> </util:list> <util:map id="emailMap" value-type="java.util.List"> <!-- Map between String key and List --> <entry key="entry1" value-ref="list1" /> <entry key="entry2" value-ref="list2" /> ... </util:map>

Entonces usa este mapa en cualquier frijol tuyo como este:

<bean id="myBean" class="com.sample.beans"> <property name="emailMap" ref="emailMap" /> </bean>


Este es mi ejemplo:

<bean class="com.common.handlermgmnt.HandlerMapAdder"> <constructor-arg index="0" type="java.util.Map"> <map key-type="java.lang.String" value-type="com.common.ViewWidget"> <entry key="DefaultView"> <bean class="com.common.DefaultViewWidget"/> </entry> <entry key="AnotherView"> <bean class="com.common.AnotherViewWidget"/> </entry> </map> </constructor-arg> <constructor-arg index="1" type="com.common.handlermgmnt.HandlerManager" ref="widget_handlerManager"/> </bean>


Inyectarlo usando SpEL. #{carné de identidad}. esto funciona para mi

en el .xml:

<util:map id="roleLocationMap"> <entry key="ROLE_ADMIN" value-ref="listA" /> <entry key="ROLE_USER" value-ref="listB" /> </util:map>

en el .java

@Autowired public MainController( @Value("#{roleLocationMap}") final Map<String, List<String>> roleLocationMap) { this.roleLocationMap = roleLocationMap; }