Master Spring Framework with Ram N Java!
Boost your backend Java skills with clear, beginner-friendly tutorials. Subscribe now to never miss a lesson!
Subscribe to YouTube ChannelWhat is Spring Expression Language (SpEL)?
The Spring Expression Language (SpEL) is an expression language built into the Spring Framework. It enables dynamic evaluation of queries, method calls, property manipulation, and collection lookups directly inside bean definitions at runtime.
In this guide, you will learn how to extract specific key-value entries from a Map object and inject them into bean properties using pure XML configuration.
Accessing Map Elements via XML Configuration
In Spring XML files, SpEL expressions are wrapped inside the #{...} syntax. To access a value stored inside a Map bean property, use square bracket indexing notation:
value="#{beanId.mapProperty[key]}"
For example, if you have an addressInfo bean containing an addressMap, you can retrieve the value associated with key '1' and inject it directly into the target bean:
<property name="firstAddress" value="#{addressInfo.addressMap['1']}" />
How the Application Context Runs
- Configuration Loading: The Spring container reads the XML configuration file via
ClassPathXmlApplicationContext. - Bean Instantiation: The container instantiates the source bean containing the populated Map collection.
- Expression Evaluation: While creating the dependent bean, SpEL resolves the key reference against the Map and injects the resulting value.
- Bean Retrieval: You retrieve the fully initialized bean using
context.getBean()with all properties configured.
Explore More SpEL Tutorials
Expand your understanding of Spring Expression Language with these related lessons from Ram N Java:
Click here to watch on Youtube:
https://www.youtube.com/watch?v=aSrZiWwI9w8&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring Expression Language – Accessing Map[XML] | Spring Tutorial |
| Spring Expression Language – Accessing Map[XML] | Spring Tutorial |
| Spring Expression Language – Accessing Map[XML] | Spring Tutorial |
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;
public class AddressInfo
{
private Map<Integer, String> addressMap;
public AddressInfo()
{
addressMap = new LinkedHashMap<Integer, String>();
addressMap.put(1, "B220-East Street-London");
addressMap.put(2, "A220-West Street-London");
addressMap.put(3, "C220-North Street-London");
}
public Map<Integer, String> getAddressMap()
{
return addressMap;
}
public void setAddressMap(Map<Integer, String> addressMap)
{
this.addressMap = addressMap;
}
@Override
public String toString()
{
return "AddressInfo [addressMap=" + addressMap + "]";
}
}
Employee.java
public class Employee
{
private int id;
private String name;
private String firstAddress;
private String secondAddress;
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 getFirstAddress()
{
return firstAddress;
}
public void setFirstAddress(String firstAddress)
{
this.firstAddress = firstAddress;
}
public String getSecondAddress()
{
return secondAddress;
}
public void setSecondAddress(String secondAddress)
{
this.secondAddress = secondAddress;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", firstAddress="
+ firstAddress + ", secondAddress=" + secondAddress + "]";
}
}
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">
<bean id="addressInfo" class="com.ram.model.AddressInfo" />
<bean id="employee" class="com.ram.model.Employee">
<property name="id" value="10"></property>
<property name="name" value="Peter"></property>
<property name="firstAddress" value="#{addressInfo.addressMap[1]}"></property>
<property name="secondAddress" value="#{addressInfo.addressMap[2]}"></property>
</bean>
</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@736e9adb: startup date [Sun Sep 16 10:21:55 IST 2018]; root of context hierarchy
Sep 16, 2018 10:21:56 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
AddressInfo [addressMap={1=B220-East Street-London, 2=A220-West Street-London, 3=C220-North Street-London}]
Employee [id=10, name=Peter, firstAddress=B220-East Street-London, secondAddress=A220-West Street-London]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring%20EL_accessing_Map_XML.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_accessing_Map_XML
Bitbucket Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_accessing_Map_XML
See also:
No comments:
Post a Comment