Enjoying This Tutorial?
Subscribe to Ram N Java for high-quality, practical Java and Spring tutorials!
SUBSCRIBE NOWIntroduction
In Spring Framework, configuring collections inside beans is a common requirement. While the standard <set> tag allows you to inject set elements, the Spring util schema (util:set) gives you full control over defining standalone, reusable concrete collection classes like HashSet or TreeSet.
Why Use util:set?
- Explicit Class Specification: Easily specify whether your set implementation should be a
java.util.HashSet,java.util.TreeSet, orjava.util.LinkedHashSetusing theset-classattribute. - Reusability: Create standalone bean definitions that can be injected into multiple beans across your Spring configuration.
- Cleaner XML: Reduces nesting and keeps your XML application context readable and modular.
Step-by-Step Configuration
To use util:set, ensure your Spring XML header includes the xmlns:util namespace:
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="... http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
1. Defining a HashSet with util:set
<util:set id="cityHashSet" set-class="java.util.HashSet">
<value>New York</value>
<value>London</value>
<value>Tokyo</value>
</util:set>
2. Defining a TreeSet with util:set (Sorted Elements)
<util:set id="cityTreeSet" set-class="java.util.TreeSet">
<value>New York</value>
<value>London</value>
<value>Tokyo</value>
</util:set>
Key Takeaway
When you need automatic natural sorting, choose java.util.TreeSet. When performance is your primary priority and order does not matter, choose java.util.HashSet. Spring makes swapping between them effortless without modifying Java source code.
Recommended Spring Tutorials from Ram N Java
Click here to watch on Youtube:
https://www.youtube.com/watch?v=r1CbGHyUms8&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| How to create a concrete Set Collection class (HashSet and TreeSet) using util:set in Spring |
| How to create a concrete Set Collection class (HashSet and TreeSet) using util:set in Spring |
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%20http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ram.core</groupId>
<artifactId>SpringDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringDemo</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring 5 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>
</project>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0%20http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ram.core</groupId>
<artifactId>SpringDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringDemo</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring 5 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>
</project>
FruitShop.java
package com.ram.core;
import java.util.Set;
public class FruitShop
{
private String shopName;
private Set<String> setOfAvailableFruits;
public String getShopName()
{
return shopName;
}
public void setShopName(String shopName)
{
System.out.println("setShopName(String shopName) is "
+ "called by the Spring Container");
this.shopName = shopName;
}
public Set<String> getSetOfAvailableFruits()
{
return setOfAvailableFruits;
}
public void setSetOfAvailableFruits(Set<String> setOfAvailableFruits)
{
System.out.println(
"setSetOfAvailableFruits(Set<String> setOfAvailableFruits) is "
+ "called by the Spring Container");
this.setOfAvailableFruits = setOfAvailableFruits;
}
public void displayFruitShopInfo()
{
System.out.println("FruitShop [shopName=" + shopName
+ ", setOfAvailableFruits=" + setOfAvailableFruits + "]");
}
}
import java.util.Set;
public class FruitShop
{
private String shopName;
private Set<String> setOfAvailableFruits;
public String getShopName()
{
return shopName;
}
public void setShopName(String shopName)
{
System.out.println("setShopName(String shopName) is "
+ "called by the Spring Container");
this.shopName = shopName;
}
public Set<String> getSetOfAvailableFruits()
{
return setOfAvailableFruits;
}
public void setSetOfAvailableFruits(Set<String> setOfAvailableFruits)
{
System.out.println(
"setSetOfAvailableFruits(Set<String> setOfAvailableFruits) is "
+ "called by the Spring Container");
this.setOfAvailableFruits = setOfAvailableFruits;
}
public void displayFruitShopInfo()
{
System.out.println("FruitShop [shopName=" + shopName
+ ", setOfAvailableFruits=" + setOfAvailableFruits + "]");
}
}
applicationContext.xml
<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-4.3.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<bean id="fruitShop" class="com.ram.core.FruitShop">
<property name="shopName" value="Fruit Mart"></property>
<property name="setOfAvailableFruits">
<util:set set-class="java.util.HashSet">
<value>Apple</value>
<value>Pineapple</value>
<value>Orange</value>
</util:set>
</property>
</bean>
</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-4.3.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<bean id="fruitShop" class="com.ram.core.FruitShop">
<property name="shopName" value="Fruit Mart"></property>
<property name="setOfAvailableFruits">
<util:set set-class="java.util.HashSet">
<value>Apple</value>
<value>Pineapple</value>
<value>Orange</value>
</util:set>
</property>
</bean>
</beans>
App.java
package com.ram.core;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
FruitShop fruitShop = (FruitShop) context.getBean("fruitShop");
System.out.println(
"Got fruitShop object from the ApplicationContext(Spring Container)");
fruitShop.displayFruitShopInfo();
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
FruitShop fruitShop = (FruitShop) context.getBean("fruitShop");
System.out.println(
"Got fruitShop object from the ApplicationContext(Spring Container)");
fruitShop.displayFruitShopInfo();
}
}
Output
Jul 28, 2018 12:38:44 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Sat Jul 28 12:38:44 IST 2018]; root of context hierarchy
Jul 28, 2018 12:38:44 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
setShopName(String shopName) is called by the Spring Container
setSetOfAvailableFruits(Set<String> setOfAvailableFruits) is called by the Spring Container
---------------------------------------
Got fruitShop object from the ApplicationContext(Spring Container)
FruitShop [shopName=Fruit Mart, setOfAvailableFruits=[Apple, Pineapple, Orange]]
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Sat Jul 28 12:38:44 IST 2018]; root of context hierarchy
Jul 28, 2018 12:38:44 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
setShopName(String shopName) is called by the Spring Container
setSetOfAvailableFruits(Set<String> setOfAvailableFruits) is called by the Spring Container
---------------------------------------
Got fruitShop object from the ApplicationContext(Spring Container)
FruitShop [shopName=Fruit Mart, setOfAvailableFruits=[Apple, Pineapple, Orange]]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Util_Set.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Util_Set
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/463ef0439e374e3884b06b8ead881ecf3ac4364f/Spring_2018/SpringDemo_Util_Set/?at=master
See also:
No comments:
Post a Comment