Wednesday, 8 August 2018

How to create a concrete Set Collection class (HashSet and TreeSet) using util:set in Spring

Enjoying This Tutorial?

Subscribe to Ram N Java for high-quality, practical Java and Spring tutorials!

SUBSCRIBE NOW

Introduction

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, or java.util.LinkedHashSet using the set-class attribute.
  • 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.


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>

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 + "]");
    }

}

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>

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();

    }

}

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]]

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:

  • All JavaEE Videos Playlist
  • All JavaEE Videos
  • All JAVA EE Links
  • Spring Tutorial
  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • Java Collection Framework Tutorial
  • JAVA Tutorial
  • Kids Tutorial
  • Cooking Tutorial
  • No comments:

    Post a Comment

    Tutorials