Showing posts with label Spring Util Schema. Show all posts
Showing posts with label Spring Util Schema. Show all posts

Friday, 10 August 2018

How to create a concrete Map collection class (HashMap and TreeMap) using util:map in Spring

Master Spring & Java Development!

Subscribe to Ram N Java for clean, beginner-friendly coding guides!

🔔 Subscribe to Ram N Java

Overview: Concrete Map Collections with util:map in Spring

In the Spring Framework, managing collections inside XML configuration can sometimes become verbose when using standard bean definitions. The Spring util schema offers concise, dedicated XML tags to declare collection beans directly. With the <util:map> element, you can easily instantiate concrete map implementations such as java.util.HashMap or java.util.TreeMap as standalone beans.

In this guide, you will learn how to declare concrete Map collection beans using the util:map namespace, configure their implementation classes, and inject them cleanly into your Spring beans.

Why Use <util:map> in Spring?

The util:map tag simplifies collection bean configuration with several benefits:

  • Clean & Concise XML: Eliminates boilerplate MapFactoryBean declarations by providing a dedicated, expressive schema element.
  • Concrete Class Customization: Use the map-class attribute to specify concrete collection types such as java.util.HashMap, java.util.LinkedHashMap, or java.util.TreeMap.
  • Standalone Reusable Bean: Defines a map bean with its own id, allowing it to be shared and injected across multiple collaborating beans.
  • Sorting & Ordering: Specifying java.util.TreeMap guarantees that keys are kept in their natural sorted order.

Step-by-Step Configuration

  1. Declare the Util Namespace: Add the util schema definition to your Spring XML configuration:
    xmlns:util="http://www.springframework.org/schema/util"
  2. Define the Map with util:map: Set the desired concrete class via map-class and add key-value entries:
    <util:map id="countryCapitals" map-class="java.util.TreeMap">
      <entry key="India" value="New Delhi"/>
      <entry key="USA" value="Washington D.C."/>
    </util:map>
  3. Inject the Map into Target Bean: Reference the map bean in your target bean definition:
    <bean id="countryService" class="com.example.CountryService">
      <property name="capitals" ref="countryCapitals"/>
    </bean>

Recommended Next Videos from Ram N Java


Click here to watch on Youtube:
https://www.youtube.com/watch?v=agCpoM0pC4U&list=UUhwKlOVR041tngjerWxVccw

Click the below Image to Enlarge:


How to create a concrete Map collection class (HashMap and TreeMap) using util:map in Spring

How to create a concrete Map collection class (HashMap and TreeMap) using util:map 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.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class FruitShop
{
    private String shopName;
    private Map<Integer, String> mapOfAvailableFruits;

    public String getShopName()
    {
        return shopName;
    }

    public void setShopName(String shopName)
    {
        this.shopName = shopName;
    }

    public Map<Integer, String> getMapOfAvailableFruits()
    {
        return mapOfAvailableFruits;
    }

    public void setMapOfAvailableFruits(
            Map<Integer, String> mapOfAvailableFruits)
    {
        this.mapOfAvailableFruits = mapOfAvailableFruits;
    }

    public void displayFruitShopInfo()
    {
        System.out.println("FruitShop [shopName=" + shopName
                + ", mapOfAvailableFruits=" + mapOfAvailableFruits + "]");

        System.out.println("Fruit ShopName = " + shopName);
        Set<Entry<Integer, String>> set = mapOfAvailableFruits.entrySet();
        Iterator<Entry<Integer, String>> itr = set.iterator();
        while (itr.hasNext())
        {
            Entry<Integer, String> entry = itr.next();
            System.out.println("Fruit Id = " + entry.getKey()
                    + ", Fruit Name = " + entry.getValue());
        }
    }

}

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="mapOfAvailableFruits">
            <util:map map-class="java.util.HashMap">
                <entry key="1" value="Apple"></entry>
                <entry key="2" value="Grapes"></entry>
            </util:map>
        </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 30, 2018 9:46:08 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Mon Jul 30 09:46:08 IST 2018]; root of context hierarchy
Jul 30, 2018 9:46:08 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Got fruitShop object from the ApplicationContext(Spring Container)
FruitShop [shopName=Fruit Mart, mapOfAvailableFruits={1=Apple, 2=Grapes}]
Fruit ShopName = Fruit Mart
Fruit Id = 1, Fruit Name = Apple
Fruit Id = 2, Fruit Name = Grapes

Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_util_map.zip?attredirects=0&d=1

Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_util_map

Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/463ef0439e374e3884b06b8ead881ecf3ac4364f/Spring_2018/SpringDemo_util_map/?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
  • Tutorials