Я пытаюсь внедрить объект HashMap, используя пространство имен util, но не могу получить класс HashMap для этого объекта (имя класса LinkedHashMap печатается.) Не удается выяснить, почему это происходит.
В этом тесте я использую банки ниже Spring:
1. spring-beans-5.0.7.RELEASE.jar
2. spring-context-5.0.7.RELEASE.jar
3. spring-core-5.0.7.RELEASE.jar
4. spring-expression-5.0.7.RELEASE.jar
5. commons-logging-1.1.1.jar
Класс бобов:
package com.vitp.pkg1;
import java.util.HashMap;
public class ActualCollections {
private HashMap<String,Integer> student;
public void setStudent(HashMap<String, Integer> student) {
this.student = student;
}
public void displayData()
{
System.out.println("Map data(Student<name,rollnumber>) : ---default is LinkedHashMap And actual is :: "+student.getClass().getName());
for(String key : student.keySet())
{
System.out.println(key+"::"+student.get(key));
}
}
}
Driverкласс для проверки вывода:
package com.vitp.start;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.vitp.pkg1.ActualCollections;
import com.vitp.pkg1.DefaultCollections;
public class ActualCollectionObjectInjectionTest {
public static void main(String... s)
{
ApplicationContext beans = new ClassPathXmlApplicationContext("/com/vitp/resources/particular_collection.xml");
ActualCollections pc = (ActualCollections) beans.getBean("pc");
pc.displayData();
}
}
XML-файл конфигурации:
<!--In this case we need to make use of util namespace so will use xsd instate of dtd.-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="pc" class="com.vitp.pkg1.ActualCollections">
<!--Set Map attribute with setter injection-->
<property name="student">
<util:map map-class="java.util.HashMap">
<!-- demonstrating various ways on values for entry-->
<entry key="Sachin" value="1"/>
<!--way2-->
<entry key="Rahul">
<value>2</value>
</entry>
<!--way3-->
<entry key="Vinayak" value-ref="three"/>
<!--way4-->
<entry key="Salman">
<ref bean="four"/>
</entry>
</util:map>
</property>
</bean>
<bean id="three" class="java.lang.Integer">
<constructor-arg index="0">
<value>3</value>
</constructor-arg>
</bean>
<bean id="four" class="java.lang.Integer">
<constructor-arg index="0">
<value>4</value>
</constructor-arg>
</bean>
</beans>
И результат:
Sep 09, 2018 7:17:03 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@27f8302d: startup date [Sun Sep 09 19:17:03 IST 2018]; root of context hierarchy
Sep 09, 2018 7:17:03 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [com/vitp/resources/particular_collection.xml]
Map data(Student<name,rollnumber>) : ---default is LinkedHashMap And actual is :: java.util.LinkedHashMap
Rahul::2
Vinayak::3
Sachin::1
Salman::4
Я ожидаю, что это должен быть класс HashMap.