Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: Accessing Map Elements in SpEL
The Spring Expression Language (SpEL) provides powerful collection-handling capabilities right inside your configuration. When dealing with key-value data structures, SpEL allows you to extract individual entries directly from a Map using bracket notation.
In this guide, you will learn how to access Map elements where the key is a String, enabling dynamic value resolution and injection into your Spring beans.
How Map Key Access Works
SpEL supports standard indexer syntax to query key-value pairs stored in a java.util.Map:
-
String Key Syntax: Use single quotes inside brackets to specify a String key:
#{beanName.mapProperty['myKey']}. - Type Safety: Spring evaluates the expression during bean initialization and automatically coerces the retrieved value into the target field's type.
- Clean Decoupling: Retrieve specific configuration entries or lookup values without writing manual lookup code in your business logic.
Implementation Steps
- Define the Source Map: Configure a bean containing a populated Map with String keys (e.g., country codes, configuration properties, or user metadata).
-
Query with SpEL: Reference the desired key inside your property expression, such as
#{telephoneMap['US']}. - Inject Value: Let the Spring IoC container inject the resolved value directly into your dependent bean.
Recommended Next Videos from Ram N Java
- 👉 Spring Expression Language–Accessing List Collection with Annotation Configuration | Spring Tutorial
- 👉 Mastering Logical Operators in Spring Expression Language (SpEL) with Annotation| Spring Tutorial
- 👉 Mathematical operators in Spring Expression Language SpEL with Annotation | Spring Tutorial
Click here to watch on Youtube:
https://www.youtube.com/watch?v=rpRRsfAlpes&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring Expression Language – Accessing Map[key is String] | Spring Tutorial |
| Spring Expression Language – Accessing Map[key is String] | Spring Tutorial |
| Spring Expression Language – Accessing Map[key is String] | Spring Tutorial |
pom.xml
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.5.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>
AddressInfo.java
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component("addressInfo")
public class AddressInfo
{
private Map<String, String> addressMap;
public AddressInfo()
{
addressMap = new LinkedHashMap<String, String>();
addressMap.put("East", "B220-East Street-London");
addressMap.put("West", "A220-West Street-London");
addressMap.put("North", "C220-North Street-London");
}
public Map<String, String> getAddressMap()
{
return addressMap;
}
public void setAddressMap(Map<String, String> addressMap)
{
this.addressMap = addressMap;
}
@Override
public String toString()
{
return "AddressInfo [addressMap=" + addressMap + "]";
}
}
Employee.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("employee")
public class Employee
{
@Value("10")
private int id;
@Value("Peter")
private String name;
@Value("#{addressInfo.addressMap['West']}")
private String westAddress;
@Value("#{addressInfo.addressMap['North']}")
private String northAddress;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getWestAddress()
{
return westAddress;
}
public void setWestAddress(String westAddress)
{
this.westAddress = westAddress;
}
public String getNorthAddress()
{
return northAddress;
}
public void setNorthAddress(String northAddress)
{
this.northAddress = northAddress;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", westAddress="
+ westAddress + ", northAddress=" + northAddress + "]";
}
}
applicationContext.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.ram" />
</beans>
App.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.model.Employee;
import com.ram.model.AddressInfo;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
AddressInfo addressInfo = (AddressInfo) context.getBean("addressInfo");
System.out.println(addressInfo + "\n");
Employee employee = (Employee) context.getBean("employee");
System.out.println(employee);
}
}
Output
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@45ff54e6: startup date [Tue Sep 18 09:44:54 IST 2018]; root of context hierarchy
Sep 18, 2018 9:44:54 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
AddressInfo [addressMap={East=B220-East Street-London, West=A220-West Street-London, North=C220-North Street-London}]
Employee [id=10, name=Peter, westAddress=A220-West Street-London, northAddress=C220-North Street-London]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring%20EL_accessing_Map_Key_String.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_accessing_Map_Key_String
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/41b19a6ea5ff82d0f409d467c69dd68cdbbf4a93/Spring_2018/SpringDemo_Spring%20EL_accessing_Map_Key_String/?at=master
See also: