Concept Overview
Sometimes, it is necessary to inject a Collection of type
java.util.Map
into a bean using Spring injection. e.g. A TelephoneDirectory maps the name of a person with his telephone number.
This is achieved by using the
map
tag within the
property
tag in Spring configuration.
The following sample program provides an overview of injecting a Map of person’s name and telephone number into a TelephoneDirectory bean.
Sample Program Overview
We will create a TelephoneDirectory class.
We will also create a member of TelephoneDirectory class called ‘directoryMap’ of type
java.util.Map
.
Using Spring’s configuration, we will inject some names and corresponding telephone numbers into the directoryMap (e.g. ‘Alba’=>123456789, ‘Bach’=>567890123 and ‘Cindy’=>789012345)
Finally, we will test our setup using TestInjectionMap class which will load Spring context and get a reference to TelephoneDirectory class. We will fetch the directoryMap from TelephoneDirectory class and print them in the console to verify that the elements of the Map have been successfully injected.
Note:
- Although we have used setter injection in this example, it is also possible to inject java.util.Map using constructor injection.
- Although we used simple types within the list using value tag, we can also use bean references within list using ref tag.
- commons-logging.jar
- log4j.jar
- org.springframework.aop.jar
- org.springframework.asm.jar
- org.springframework.beans.jar
- org.springframework.context.jar
- org.springframework.context.support.jar
- org.springframework.core.jar
- org.springframework.expression.jar
Create the TelephoneDirectory class (see below).
Create a member called ‘directoryMap’ of type
java.util.Map
(see line 7 below)
Create accessor methods for ‘directoryMap’ (see lines 9-15 below)
Create the spring-config.xml file (see below).
Declare bean for TelephoneDirectory class (see line 10 below)
For the ‘directoryMap’ property (see line 11 below), we define a
map
tag (see line 12 below).
We populate the keys and values of the Map using the
entry
tag (see lines 13-15 below).
Finally, we need a java program to test the our setup.This is done by TestInjectionMap.java (see source code below).
We need to tell Spring framework to use the ‘spring-config.xml’ to load our beans (see line 11 below).
We get the reference to TelephoneDirectory class through Spring using the bean name ‘telephoneDirectory’ (see line 12 below).
We access the TelephoneDirectory.getDirectoryMap() method and output the contents to verify that the Map has been injected successfully (see line 13 below).
This sample program has been packaged as a jar installer which will copy the source code (along with all necessary dependencies) on your machine and automatically run the program for you as shown in the steps below. To run the sample program, you only need Java Runtime Environment (JRE) on your machine and nothing else.
(Alternatively you can go the folder containing the springinjectionmap-installer.jar and execute the jar using
java -jar springinjectionmap-installer.jar
command)
This source code for this program is downloaded in the folder specified by you (say, C:\Temp) as an eclipse project called
springinjectionmap
. All the required libraries have also been downloaded and placed in the same location. You can open this project from Eclipe IDE and directly browse the source code. See below for details of the project structure.