Beans

Spring Collections (List, Set, Map and Properties) Example

With this example we shall show you how to inject Collections in Spring Beans properties. The types of Collections that are supported by Spring are List, Set, Map and Properties.

In order to show how the Collections can be injected in a Spring Bean we will create a simple Spring Bean with four properties, List, Set, Map and Properties.

Our preferred development environment is Eclipse. We are using Eclipse Juno (4.2) version, along with Maven Integration plugin version 3.1.0. You can download Eclipse from here and Maven Plugin for Eclipse from here. The installation of Maven plugin for Eclipse is out of the scope of this tutorial and will not be discussed. We are also using Spring version 3.2.3 and the JDK 7_u_21.

Let’s begin.

1. Create a new Maven project

Go to File -> Project ->Maven -> Maven Project.

New-Maven-Project

In the “Select project name and location” page of the wizard, make sure that “Create a simple project (skip archetype selection)” option is checked, hit “Next” to continue with default values.

Maven-Project-Name-Location

In the “Enter an artifact id” page of the wizard, you can define the name and main package of your project. We will set the “Group Id” variable to "com.javacodegeeks.snippets.enterprise" and the “Artifact Id” variable to "springexample". The aforementioned selections compose the main project package as "com.javacodegeeks.snippets.enterprise.springexample" and the project name as "springexample". Hit “Finish” to exit the wizard and to create your project.

Configure-Maven-Project

The Maven project structure is shown below:

Maven-project-structure

    It consists of the following folders:

  • /src/main/java folder, that contains source files for the dynamic content of the application,
  • /src/test/java folder contains all source files for unit tests,
  • /src/main/resources folder contains configurations files,
  • /target folder contains the compiled and packaged deliverables,
  • the pom.xml is the project object model (POM) file. The single file that contains all project related configuration.

2. Add Spring 3.2.3 dependency

  • Locate the “Properties” section at the “Overview” page of the POM editor and perform the following changes:
    Create a new property with name org.springframework.version and value 3.2.3.RELEASE.
  • Navigate to the “Dependencies” page of the POM editor and create the following dependencies (you should fill the “GroupId”, “Artifact Id” and “Version” fields of the “Dependency Details” section at that page):
    Group Id : org.springframework Artifact Id : spring-web Version : ${org.springframework.version}

Alternatively, you can add the Spring dependencies in Maven’s pom.xml file, by directly editing it at the “Pom.xml” page of the POM editor, as shown below:
 
pom.xml:

<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>com.javacodegeeks.snippets.enterprise</groupId>
	<artifactId>springexample</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
	</dependencies>

	<properties>
		<spring.version>3.2.3.RELEASE</spring.version>
	</properties>
</project>

As you can see Maven manages library dependencies declaratively. A local repository is created (by default under {user_home}/.m2 folder) and all required libraries are downloaded and placed there from public repositories. Furthermore intra – library dependencies are automatically resolved and manipulated.

3. Create a simple Spring Bean with all Collections properties

We create a simple Spring Bean, HelloWorld, that has four properties, a Map, a Set, a List and a Properties field.
 
HelloWorld.java:

package com.javacodegeeks.snippets.enterprise.services;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class HelloWorld {
	
	private List<Object> list;

	private Set<Object> set;
	
	private Map<Object, Object> map;

	private Properties props;

	public List<Object> getList() {
		return list;
	}

	public void setList(List<Object> list) {
		this.list = list;
	}

	public Set<Object> getSet() {
		return set;
	}

	public void setSet(Set<Object> set) {
		this.set = set;
	}

	public Map<Object, Object> getMap() {
		return map;
	}

	public void setMap(Map<Object, Object> map) {
		this.map = map;
	}

	public Properties getProps() {
		return props;
	}

	public void setProps(Properties props) {
		this.props = props;
	}
		
}

4. XML-based approach for Collections injection into Spring Bean properties

In order to add a value that belongs to one of the Spring supported Collections, we can use the <list/>, <set/>, <map/> and <props/> elements inside the <property/> element.
 
list example

		<property name="list">
			<list>
				<value>1</value>
				<ref bean="personBean"/>
			</list>
		</property>

 
set example

		<property name="set">
			<set>
				<value>setvalue1</value>
				<ref bean="personBean" />
			</set>
		</property>

 
map example

		<property name="map">
			<map>
				<entry key="1" value="value1" />
				<entry key="2" value-ref="personBean" />
			</map>
		</property>

 
props example

		<property name="props">
			<props>
				<prop key="key1">1000</prop>
				<prop key="key2">2000</prop>
				<prop key="key3">3000</prop>
			</props>
		</property>

 
applicationContext.xml

<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"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">

	<bean id="helloWorldBean" class="com.javacodegeeks.snippets.enterprise.services.HelloWorld">
		<property name="list">
			<list>
				<value>1</value>
				<ref bean="personBean" />
			</list>
		</property>
		<property name="set">
			<set>
				<value>setvalue1</value>
				<ref bean="personBean" />
			</set>
		</property>
		<property name="map">
			<map>
				<entry key="1" value="value1" />
				<entry key="2" value-ref="personBean" />
			</map>
		</property>
		<property name="props">
			<props>
				<prop key="key1">1000</prop>
				<prop key="key2">2000</prop>
				<prop key="key3">3000</prop>
			</props>
		</property>
	</bean>
	
	<bean id="personBean" class="com.javacodegeeks.snippets.enterprise.services.Person">
		<property name="name" value="John"/>
		<property name="id" value="12345"/>
	</bean>
	</beans>

Note that an element of a collection can be a reference to another defined Spring Bean. For example, an entry defined in the map and an element defined in the set are both references to Person, that is also a bean defined in applicationContext.xml.
 
Person.java:

package com.javacodegeeks.snippets.enterprise.services;

public class Person {

	private Long id;
	
	private String name;
	
	public void setId(Long id){
		this.id = id;
	}

	public void setName(String name){
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Person: [ " + name +", " + id + "]";
	}
}

4. Run the application

In the App.class we load the helloWorldBean through the ApplicationContext , and use the fields’ getters to get the values set to the collections in applicationContext.xml.
 
App.java:

package com.javacodegeeks.snippets.enterprise;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.javacodegeeks.snippets.enterprise.services.HelloWorld;

public class App {
	
	@SuppressWarnings("resource")
	public static void main(String[] args) {
	
			ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
			
			HelloWorld hello = (HelloWorld) context.getBean("helloWorldBean");
			
			System.out.println("List: " + hello.getList());
			
			System.out.println("Set : " + hello.getSet());
			
			System.out.println("Map : " + hello.getMap());
			
			System.out.println("Props : " + hello.getProps());
					
	}
}

5. Output

When we execute the application, the elements contained in each collection are returned :

List: [1, Person: [ John, 12345]]
Set : [setvalue1, Person: [ John, 12345]]
Map : {1=value1, 2=Person: [ John, 12345]}
Props : {key3=3000, key2=2000, key1=1000}

 
This was an example of Collections injection in Spring beans.
 
Download the Eclipse project of this tutorial :springCollectionsExample.zip

Theodora Fragkouli

Theodora has graduated from Computer Engineering and Informatics Department in the University of Patras. She also holds a Master degree in Economics from the National and Technical University of Athens. During her studies she has been involved with a large number of projects ranging from programming and software engineering to telecommunications, hardware design and analysis. She works as a junior Software Engineer in the telecommunications sector where she is mainly involved with projects based on Java and Big Data technologies.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Dimitris Fourakis
Dimitris Fourakis
2 years ago

very useful!!!

Back to top button