logo

Spring Constructor Dependency Injection With Map


Show

Here, we will shed light on the use of Map for the Constructor Dependency Injection in Spring framework with a simple example. Here, we will use the map as the answer that has an answer with a posted username. We will use both key and value pairs as a string.

Likewise the examples before, we are using an example of a forum where one question can have multiple answers. We will use the three classes:

  • Question.java
  • applicationContext.xml
  • Test.java

Question.Java

This class contains three properties, two constructors, and a displayInfo() method to print the information.

package com.intellinuts;  

import java.util.Iterator;  
import java.util.Map;  
import java.util.Set;  
import java.util.Map.Entry;  

public class Question {  
private int id;  
private String name;  
private Map<String,String> answers;  

public Question() {}  
public Question(int id, String name, Map<String, String> answers) {  
    super();  
    this.id = id;  
    this.name = name;  
    this.answers = answers;  
}  

public void displayInfo(){  
    System.out.println("question id:"+id);  
    System.out.println("question name:"+name);  
    System.out.println("Answers....");  
    Set<Entry<String, String>> set=answers.entrySet();  
    Iterator<Entry<String, String>> itr=set.iterator();  
    while(itr.hasNext()){  
        Entry<String,String> entry=itr.next();  
        System.out.println("Answer:"+entry.getKey()+" Posted By:"+entry.getValue());  
    }  
}  
}  

ApplicationContext.xml

In this class, the entry attribute of the map is used to define the key and value information.

<?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.0.xsd">  

<bean id="q" class="com.intellinuts.Question">  
<constructor-arg value="11"></constructor-arg>  
<constructor-arg value="What is Java?"></constructor-arg>  
<constructor-arg>  
<map>  
<entry key="Java is a Programming Language" value="Ajay Kumar"></entry>  
<entry key="Java is a Platform" value="John Smith"></entry>  
<entry key="Java is an Island" value="Raj Kumar"></entry>  
</map>  
</constructor-arg>  
</bean>  

</beans>  

Test.Java

This class gets the bean from the applicationContext.xml file and calls the displayInfo() method.

package com.intellinuts;  

import org.springframework.beans.factory.BeanFactory;  
import org.springframework.beans.factory.xml.XmlBeanFactory;  
import org.springframework.core.io.ClassPathResource;  
import org.springframework.core.io.Resource;  

public class Test {  
public static void main(String[] args) {  
    Resource r=new ClassPathResource("applicationContext.xml");  
    BeanFactory factory=new XmlBeanFactory(r);  

    Question q=(Question)factory.getBean("q");  
    q.displayInfo();  

}  

}  

Output:

Question id: 11
Question name: What is Java?
Answers.
Answer: Java is a Programming Language Posted by: Ajay Kumar
Answer: Java is a Platform Posted by: John Smith
Answer: Java is an Island posted by: Raj Kumar