Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: Method Invocation in SpEL via XML
The Spring Expression Language (SpEL) allows you to execute methods on Spring beans or standard Java objects dynamically within your XML configuration files. Instead of writing custom factory beans or initialization methods in Java, SpEL enables you to invoke methods and inject their return values directly into bean properties during container startup.
In this guide, you will learn how to configure method invocations—both with and without arguments—inside an XML-based bean configuration.
Understanding Method Invocation Syntax in XML
SpEL supports standard Java method call syntax inside expression delimiters:
-
Calling Bean Methods: Execute methods on other managed Spring beans:
value="#{serviceBean.getMessage()}". -
Passing Arguments: Pass literal values, numbers, or bean properties as parameters:
value="#{calculatorBean.add(10, 20)}". -
Calling Methods on String Literals: Execute utility methods on literal objects:
value="#{'Spring Framework'.toUpperCase()}". -
Method Chaining: Chain multiple method calls together:
value="#{beanName.getName().trim().toLowerCase()}".
Configuring Method Invocations in XML
To invoke a method and inject its result into a target bean property:
- Configure the Source Bean: Define the Spring bean containing the business method you wish to call.
-
Use <property> with SpEL: In your dependent bean definition, specify the method call in the
valueattribute:
<property name="greeting" value="#{greetingService.sayHello('Ram')}" /> -
Container Initialization: When the
ApplicationContextinitializes, Spring invokes the method and assigns the returned value to the property.
Recommended Next Videos from Ram N Java
- 👉 Spring expression language method invocation (Annotation) | Spring Tutorial | Spring Framework
- 👉 Mastering Spring Expression Language Ternary Operator (if-then-else) Example [XML] | Spring Tutorial
- 👉 Mastering Relational Operators in Spring Expression Language (SpEL) with XML | Spring Tutorial
Click here to watch on Youtube:
https://www.youtube.com/watch?v=oD6MYuTDGMo&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring expression language method invocation (XML) | Spring Tutorial | Spring Framework |
| Spring expression language method invocation (XML) | Spring Tutorial | Spring Framework |
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.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>
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>
Address.java
package com.ram.model;
public class Address
{
private String street;
private String city;
private String state;
public String getStreet()
{
return street;
}
public void setStreet(String street)
{
this.street = street;
}
public String getCity()
{
return city;
}
public void setCity(String city)
{
this.city = city;
}
public String getState()
{
return state;
}
public void setState(String state)
{
this.state = state;
}
public String getFullAddress()
{
return street + "," + city + "," + state;
}
@Override
public String toString()
{
return "Address [street=" + street + ", city=" + city + ", state="
+ state + "]";
}
}
public class Address
{
private String street;
private String city;
private String state;
public String getStreet()
{
return street;
}
public void setStreet(String street)
{
this.street = street;
}
public String getCity()
{
return city;
}
public void setCity(String city)
{
this.city = city;
}
public String getState()
{
return state;
}
public void setState(String state)
{
this.state = state;
}
public String getFullAddress()
{
return street + "," + city + "," + state;
}
@Override
public String toString()
{
return "Address [street=" + street + ", city=" + city + ", state="
+ state + "]";
}
}
Employee.java
package com.ram.model;
public class Employee
{
private int id;
private String name;
private String fullAddress;
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 getFullAddress()
{
return fullAddress;
}
public void setFullAddress(String fullAddress)
{
this.fullAddress = fullAddress;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", fullAddress="
+ fullAddress + "]";
}
}
public class Employee
{
private int id;
private String name;
private String fullAddress;
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 getFullAddress()
{
return fullAddress;
}
public void setFullAddress(String fullAddress)
{
this.fullAddress = fullAddress;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", fullAddress="
+ fullAddress + "]";
}
}
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
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="address" class="com.ram.model.Address">
<property name="street" value="A220 Bridge Appartment"></property>
<property name="city" value="Chennai"></property>
<property name="state" value="TamilNadu"></property>
</bean>
<bean id="employee" class="com.ram.model.Employee">
<property name="id" value="100"></property>
<property name="name" value="Peter"></property>
<property name="fullAddress" value="#{address.getFullAddress()}"></property>
</bean>
</beans>
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="address" class="com.ram.model.Address">
<property name="street" value="A220 Bridge Appartment"></property>
<property name="city" value="Chennai"></property>
<property name="state" value="TamilNadu"></property>
</bean>
<bean id="employee" class="com.ram.model.Employee">
<property name="id" value="100"></property>
<property name="name" value="Peter"></property>
<property name="fullAddress" value="#{address.getFullAddress()}"></property>
</bean>
</beans>
App.java
package com.ram.core;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.model.Employee;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
Employee employee = (Employee) context.getBean("employee");
System.out.println(
"Got employee object from the ApplicationContext(Spring Container)");
System.out.println(employee);
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.model.Employee;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
Employee employee = (Employee) context.getBean("employee");
System.out.println(
"Got employee object from the ApplicationContext(Spring Container)");
System.out.println(employee);
}
}
Output
Sep 03, 2018 9:41:15 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Mon Sep 03 09:41:15 IST 2018]; root of context hierarchy
Sep 03, 2018 9:41:15 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Got employee object from the ApplicationContext(Spring Container)
Employee [id=100, name=Peter, fullAddress=A220 Bridge Appartment,Chennai,TamilNadu]
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Mon Sep 03 09:41:15 IST 2018]; root of context hierarchy
Sep 03, 2018 9:41:15 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Got employee object from the ApplicationContext(Spring Container)
Employee [id=100, name=Peter, fullAddress=A220 Bridge Appartment,Chennai,TamilNadu]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring_EL_method_invocation_xml.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring_EL_method_invocation_xml
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/13d8c90b997048bdc5084bfdce013eb8d2ccb438/Spring_2018/SpringDemo_Spring_EL_method_invocation_xml/?at=master
See also:
No comments:
Post a Comment