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.

  1. package com.kb.di;
  2.  
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6.  
  7. public class Person {
  8.     private int id;
  9.     private String name;
  10.     private Map<String, String> phoneNos;
  11.  
  12.     public Person(int id, String name, Map<String, String> phoneNos) {
  13.         super();
  14.         this.id = id;
  15.         this.name = name;
  16.         this.phoneNos = phoneNos;
  17.     }
  18.     public void showPhoneNos(){
  19.     for (Entry<String, String> entry : phoneNos.entrySet()) {
  20.         System.out.println(entry.getKey()+"-->"+entry.getValue());
  21.     }
  22.        
  23.     }
  24.     }
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.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xmlns:p="http://www.springframework.org/schema/p"
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans
  6.        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
  7.  
  8.  <bean id="person" class="com.kb.di.Person">  
  9.     <constructor-arg value="1" type="int"/>
  10.     <constructor-arg value="Raj"/>
  11.     <constructor-arg>
  12.     <map>
  13.     <entry key="mobile" value="9999967891"/>
  14.     <entry key="landline" value="080789345"/>
  15.     </map>
  16.     </constructor-arg>
  17.  </bean>
  18. </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

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3.   <modelVersion>4.0.0</modelVersion>
  4.  
  5.   <groupId>Spring</groupId>
  6.   <artifactId>SpringCore</artifactId>
  7.   <version>0.0.1-SNAPSHOT</version>
  8.   <packaging>jar</packaging>
  9.  
  10.   <name>SpringCore</name>
  11.   <url>http://maven.apache.org</url>
  12.  
  13.   <properties>
  14.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15.   </properties>
  16.  
  17.   <dependencies>
  18.   <dependency>
  19.     <groupId>org.springframework</groupId>
  20.     <artifactId>spring-core</artifactId>
  21.     <version>4.2.4.RELEASE</version>
  22. </dependency>
  23.   <dependency>
  24.     <groupId>org.springframework</groupId>
  25.     <artifactId>spring-context</artifactId>
  26.     <version>4.2.4.RELEASE</version>
  27. </dependency>
  28.  
  29.     <dependency>
  30.       <groupId>junit</groupId>
  31.       <artifactId>junit</artifactId>
  32.       <version>3.8.1</version>
  33.       <scope>test</scope>
  34.     </dependency>
  35.   </dependencies>
  36. </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.

  1. package com.kb.di;
  2.  
  3. import org.springframework.beans.factory.BeanFactory;
  4. import org.springframework.beans.factory.xml.XmlBeanFactory;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. import org.springframework.core.io.ClassPathResource;
  8. import org.springframework.core.io.Resource;
  9.  
  10. public class ConstructorDI {
  11.    
  12.     public static void main(String[] args) {
  13.         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml");  
  14.         Person person = (Person)applicationContext.getBean("person");
  15.         person.showPhoneNos();
  16.    
  17.        
  18.     }
  19.  
  20. }
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

Download this project SpringDIWithMapOfStrings.zip

About the Author

Founder of javainsimpleway.com
I love Java and open source technologies and very much passionate about software development.
I like to share my knowledge with others especially on technology 🙂
I have given all the examples as simple as possible to understand for the beginners.
All the code posted on my blog is developed,compiled and tested in my development environment.
If you find any mistakes or bugs, Please drop an email to kb.knowledge.sharing@gmail.com

Connect with me on Facebook for more updates

Share this article on