Constructor Dependency Injection with Map of String
In some scenarios, we may need to inject a map of strings to an object.
In such cases, we inject a map of string through a constructor.
Consider the example where Person has phone numbers which can be of type mobile or landline.
In this case, let us use Map which stores phone type as a key and phone number as a value.
Let us see the same in spring through Constructor Dependency Injection
Create a class called Person
It contains 3 attributes id,name and phoneNos where phoneNos is a Map.
It also contains showPhoneNos() method to display the phone numbers injected to the person object.
- package com.kb.di;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- public class Person {
- private int id;
- private String name;
- private Map<String, String> phoneNos;
- public Person(int id, String name, Map<String, String> phoneNos) {
- super();
- this.id = id;
- this.name = name;
- this.phoneNos = phoneNos;
- }
- public void showPhoneNos(){
- for (Entry<String, String> entry : phoneNos.entrySet()) {
- System.out.println(entry.getKey()+"-->"+entry.getValue());
- }
- }
- }
package com.kb.di;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class Person {
	private int id;
	private String name;
	private Map<String, String> phoneNos;
	public Person(int id, String name, Map<String, String> phoneNos) {
		super();
		this.id = id;
		this.name = name;
		this.phoneNos = phoneNos;
	}
	public void showPhoneNos(){
	for (Entry<String, String> entry : phoneNos.entrySet()) {
		System.out.println(entry.getKey()+"-->"+entry.getValue());
	}
		
	}
	}Create a spring bean definition file
In this file, we used < constructor-arg  > tag with < map > to define the phoneNos 
< entry > tag is used to inject Map’s key and value.
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
- <bean id="person" class="com.kb.di.Person">
- <constructor-arg value="1" type="int"/>
- <constructor-arg value="Raj"/>
- <constructor-arg>
- <map>
- <entry key="mobile" value="9999967891"/>
- <entry key="landline" value="080789345"/>
- </map>
- </constructor-arg>
- </bean>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
  
 <bean id="person" class="com.kb.di.Person">  
	<constructor-arg value="1" type="int"/>
	<constructor-arg value="Raj"/> 
	<constructor-arg>
	<map>
	<entry key="mobile" value="9999967891"/>
	<entry key="landline" value="080789345"/>
	</map>
	</constructor-arg> 
 </bean>
</beans>Create a pom.xml file
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>Spring</groupId>
- <artifactId>SpringCore</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>SpringCore</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- <version>4.2.4.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>4.2.4.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>Spring</groupId>
  <artifactId>SpringCore</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>SpringCore</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
  <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>4.2.4.RELEASE</version>
</dependency>
  <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>4.2.4.RELEASE</version>
</dependency>
  
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>Create a ConstructorDI class
This class loads the spring beans using application context and calls the person class method to display the phone numbers.
- package com.kb.di;
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.beans.factory.xml.XmlBeanFactory;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.core.io.Resource;
- public class ConstructorDI {
- public static void main(String[] args) {
- ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml");
- Person person = (Person)applicationContext.getBean("person");
- person.showPhoneNos();
- }
- }
package com.kb.di;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class ConstructorDI {
	
	public static void main(String[] args) {
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml");  
        Person person = (Person)applicationContext.getBean("person");
        person.showPhoneNos();
    
        
	}
}Run the ConstructorDI class and see the output as below

