Spring SetFactoryBean example

The ‘SetFactoryBean‘ class provides developer a way to create a concrete Set collection (HashSet and TreeSet) in Spring’s bean configuration file.

Here’s a ListFactoryBean example, it will instantiate an HashSet at runtime, and inject it into a bean property


package com.mkyong.common;

import java.util.Set;

public class Customer 
{
	private Set sets;
	//...
}

Spring’s bean configuration file.


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="CustomerBean" class="com.mkyong.common.Customer">
		<property name="sets">
			<bean class="org.springframework.beans.factory.config.SetFactoryBean">
				<property name="targetSetClass">
					<value>java.util.HashSet</value>
				</property>
				<property name="sourceSet">
					<list>
						<value>1</value>
						<value>2</value>
						<value>3</value>
					</list>
				</property>
			</bean>
		</property>
	</bean>

</beans>

Alternatively, you also can use util schema and <util:set> to achieve the same thing.


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	http://www.springframework.org/schema/util
	http://www.springframework.org/schema/util/spring-util-2.5.xsd">

	<bean id="CustomerBean" class="com.mkyong.common.Customer">
		<property name="sets">
			<util:set set-class="java.util.HashSet">
				<value>1</value>
				<value>2</value>
				<value>3</value>
			</util:set>
		</property>
	</bean>

</beans>

Remember to include the util schema, else you will hit the following error

 
Caused by: org.xml.sax.SAXParseException: 
	The prefix "util" for element "util:set" is not bound.

Run it…


package com.mkyong.common;

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

public class App 
{
    public static void main( String[] args )
    {
    	ApplicationContext context = new ClassPathXmlApplicationContext("SpringBeans.xml");

    	Customer cust = (Customer)context.getBean("CustomerBean");
    	System.out.println(cust);
    	
    }
}

Ouput


Customer [sets=[3, 2, 1]] Type=[class java.util.HashSet]

You have instantiated HashSet and and injected it into Customer’s sets property at runtime.

Download Source Code

Download It – Spring-SetFactoryBean-Example.zip (5KB)

Reference

  1. SetFactoryBean Javadoc

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
Ashok Kumar
Guest
Ashok Kumar

Thanks sir
It is Helpful Example.

Rohan Dongre
Guest
Rohan Dongre

How to print “Type=[class java.util.HashSet]”

amit sharma
Guest
amit sharma

here is one small typing mistake in this line-
Here’s a ListFactoryBean example, it will instantiate an HashSet at runtime, and inject it into a bean property

in place of ListFactoryBean example, SetFactoryBean example is right thing to type.

Leon
Guest
Leon

Hi Mr. Yong,

I was curious why the setFactoryBean prints out 3,2,1 but list and map can followed the the order 1,2,3 which was the order we set for them?

Thank you,
Leon

tommy
Guest
tommy

Hi Leon,
This is property of java collections. Order of printing is undermined for set. List and Map iterator prints data in order they were inserted.

trackback
Spring Tutorials | Tutorials

[…] SetFactoryBean example The ‘SetFactoryBean’ object provides developer a way to create a concrete Set collection class (HashSet and TreeSet) in Spring’s bean configuration file. […]

trackback
How to De-clutter an Office |

[…] Spring SetFactoryBean example | Spring […]