Master Spring Framework with Ram N Java!
Level up your backend Java knowledge. Subscribe today for step-by-step guides and practical coding examples!
Subscribe to YouTube ChannelWhat are Mathematical Operators in SpEL?
The Spring Expression Language (SpEL) supports a comprehensive set of arithmetic and mathematical operators directly inside configuration files. This allows developers to perform runtime calculations on bean properties before values are injected into target beans.
Instead of hardcoding computed values in Java code or writing boilerplate logic, you can execute arithmetic expressions right inside your Spring XML bean definitions using the #{...} syntax.
Supported Operators & Syntax
SpEL supports standard mathematical operations including:
- Addition (
+): Computes sums (e.g.,#{medicalInsurance.insuredAmount + medicalInsurance.bonusAmount}). - Subtraction (
-): Evaluates differences between numeric values or properties. - Multiplication (
*): Multiplies amounts dynamically during bean initialization. - Division (
/ordiv): Computes quotients between values. - Modulus (
%ormod): Returns the remainder of an integer division. - Exponential Power (
^): Calculates powers (e.g.,#{2 ^ 3}evaluates to 8).
Execution Lifecycle in Spring Container
- Configuration Loading: The
ApplicationContextreads the XML file defining source and target beans. - Source Bean Instantiation: The container creates the source bean (e.g.,
medicalInsurance) with its initial properties. - Expression Evaluation: While configuring dependent beans (e.g.,
employee), SpEL evaluates mathematical expressions dynamically. - Property Injection: The calculated results are injected into the target bean's properties and ready for use.
Explore More SpEL Tutorials
Enhance your Spring development skills with these related tutorials from Ram N Java:
Click here to watch on Youtube:
https://www.youtube.com/watch?v=AvN0WCFHutA&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Mathematical operators in Spring Expression Language SpEL [XML] | Spring Tutorial |
| Mathematical operators in Spring Expression Language SpEL [XML] | Spring Tutorial |
| Mathematical operators in Spring Expression Language SpEL [XML] | Spring Tutorial |
<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>
MedicalInsurence.java
package com.ram.model;
public class MedicalInsurence
{
private int insurencePolicyNumber;
private int insuredAmount;
private int bonusAmount;
public int getInsurencePolicyNumber()
{
return insurencePolicyNumber;
}
public void setInsurencePolicyNumber(int insurencePolicyNumber)
{
this.insurencePolicyNumber = insurencePolicyNumber;
}
public int getInsuredAmount()
{
return insuredAmount;
}
public void setInsuredAmount(int insuredAmount)
{
this.insuredAmount = insuredAmount;
}
public int getBonusAmount()
{
return bonusAmount;
}
public void setBonusAmount(int bonusAmount)
{
this.bonusAmount = bonusAmount;
}
@Override
public String toString()
{
return "MedicalInsurence [insurencePolicyNumber="
+ insurencePolicyNumber + ", insuredAmount=" + insuredAmount
+ ", bonusAmount=" + bonusAmount + "]";
}
}
public class MedicalInsurence
{
private int insurencePolicyNumber;
private int insuredAmount;
private int bonusAmount;
public int getInsurencePolicyNumber()
{
return insurencePolicyNumber;
}
public void setInsurencePolicyNumber(int insurencePolicyNumber)
{
this.insurencePolicyNumber = insurencePolicyNumber;
}
public int getInsuredAmount()
{
return insuredAmount;
}
public void setInsuredAmount(int insuredAmount)
{
this.insuredAmount = insuredAmount;
}
public int getBonusAmount()
{
return bonusAmount;
}
public void setBonusAmount(int bonusAmount)
{
this.bonusAmount = bonusAmount;
}
@Override
public String toString()
{
return "MedicalInsurence [insurencePolicyNumber="
+ insurencePolicyNumber + ", insuredAmount=" + insuredAmount
+ ", bonusAmount=" + bonusAmount + "]";
}
}
Employee.java
package com.ram.model;
public class Employee
{
private int id;
private String name;
private int testAdd;
private int testSubtraction;
private int testMultiplication;
private int testDivision;
private int testModulus;
private long testExponentialPower;
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 int getTestAdd()
{
return testAdd;
}
public void setTestAdd(int testAdd)
{
this.testAdd = testAdd;
}
public int getTestSubtraction()
{
return testSubtraction;
}
public void setTestSubtraction(int testSubtraction)
{
this.testSubtraction = testSubtraction;
}
public int getTestMultiplication()
{
return testMultiplication;
}
public void setTestMultiplication(int testMultiplication)
{
this.testMultiplication = testMultiplication;
}
public int getTestDivision()
{
return testDivision;
}
public void setTestDivision(int testDivision)
{
this.testDivision = testDivision;
}
public int getTestModulus()
{
return testModulus;
}
public void setTestModulus(int testModulus)
{
this.testModulus = testModulus;
}
public long getTestExponentialPower()
{
return testExponentialPower;
}
public void setTestExponentialPower(long testExponentialPower)
{
this.testExponentialPower = testExponentialPower;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", testAdd=" + testAdd
+ ", testSubtraction=" + testSubtraction
+ ", testMultiplication=" + testMultiplication
+ ", testDivision=" + testDivision + ", testModulus="
+ testModulus + ", testExponentialPower=" + testExponentialPower
+ "]";
}
}
public class Employee
{
private int id;
private String name;
private int testAdd;
private int testSubtraction;
private int testMultiplication;
private int testDivision;
private int testModulus;
private long testExponentialPower;
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 int getTestAdd()
{
return testAdd;
}
public void setTestAdd(int testAdd)
{
this.testAdd = testAdd;
}
public int getTestSubtraction()
{
return testSubtraction;
}
public void setTestSubtraction(int testSubtraction)
{
this.testSubtraction = testSubtraction;
}
public int getTestMultiplication()
{
return testMultiplication;
}
public void setTestMultiplication(int testMultiplication)
{
this.testMultiplication = testMultiplication;
}
public int getTestDivision()
{
return testDivision;
}
public void setTestDivision(int testDivision)
{
this.testDivision = testDivision;
}
public int getTestModulus()
{
return testModulus;
}
public void setTestModulus(int testModulus)
{
this.testModulus = testModulus;
}
public long getTestExponentialPower()
{
return testExponentialPower;
}
public void setTestExponentialPower(long testExponentialPower)
{
this.testExponentialPower = testExponentialPower;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", testAdd=" + testAdd
+ ", testSubtraction=" + testSubtraction
+ ", testMultiplication=" + testMultiplication
+ ", testDivision=" + testDivision + ", testModulus="
+ testModulus + ", testExponentialPower=" + testExponentialPower
+ "]";
}
}
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="medicalInsurence" class="com.ram.model.MedicalInsurence">
<property name="insurencePolicyNumber" value="10"></property>
<property name="insuredAmount" value="15000"></property>
<property name="bonusAmount" value="2000"></property>
</bean>
<bean id="employee" class="com.ram.model.Employee">
<property name="id" value="100"></property>
<property name="name" value="Peter"></property>
<property name="testAdd"
value="#{medicalInsurence.insuredAmount + medicalInsurence.bonusAmount}" />
<property name="testSubtraction"
value="#{medicalInsurence.insuredAmount - medicalInsurence.bonusAmount}" />
<property name="testMultiplication"
value="#{medicalInsurence.insuredAmount * medicalInsurence.bonusAmount}" />
<property name="testDivision"
value="#{medicalInsurence.insuredAmount / medicalInsurence.bonusAmount}" />
<property name="testModulus"
value="#{medicalInsurence.insuredAmount % medicalInsurence.bonusAmount}" />
<property name="testExponentialPower"
value="#{medicalInsurence.insuredAmount ^ medicalInsurence.bonusAmount}" />
</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="medicalInsurence" class="com.ram.model.MedicalInsurence">
<property name="insurencePolicyNumber" value="10"></property>
<property name="insuredAmount" value="15000"></property>
<property name="bonusAmount" value="2000"></property>
</bean>
<bean id="employee" class="com.ram.model.Employee">
<property name="id" value="100"></property>
<property name="name" value="Peter"></property>
<property name="testAdd"
value="#{medicalInsurence.insuredAmount + medicalInsurence.bonusAmount}" />
<property name="testSubtraction"
value="#{medicalInsurence.insuredAmount - medicalInsurence.bonusAmount}" />
<property name="testMultiplication"
value="#{medicalInsurence.insuredAmount * medicalInsurence.bonusAmount}" />
<property name="testDivision"
value="#{medicalInsurence.insuredAmount / medicalInsurence.bonusAmount}" />
<property name="testModulus"
value="#{medicalInsurence.insuredAmount % medicalInsurence.bonusAmount}" />
<property name="testExponentialPower"
value="#{medicalInsurence.insuredAmount ^ medicalInsurence.bonusAmount}" />
</bean>
</beans>
App.java
package com.ram.core;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.model.Employee;
import com.ram.model.MedicalInsurence;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
MedicalInsurence medicalInsurence = (MedicalInsurence) context
.getBean("medicalInsurence");
System.out.println(medicalInsurence+"\n");
Employee employee = (Employee) context.getBean("employee");
System.out.println(employee);
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.model.Employee;
import com.ram.model.MedicalInsurence;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
MedicalInsurence medicalInsurence = (MedicalInsurence) context
.getBean("medicalInsurence");
System.out.println(medicalInsurence+"\n");
Employee employee = (Employee) context.getBean("employee");
System.out.println(employee);
}
}
Output
Sep 14, 2018 9:51:32 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Fri Sep 14 09:51:32 IST 2018]; root of context hierarchy
Sep 14, 2018 9:51:32 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
MedicalInsurence [insurencePolicyNumber=10, insuredAmount=15000, bonusAmount=2000]
Employee [id=100, name=Peter, testAdd=17000, testSubtraction=13000, testMultiplication=30000000, testDivision=7, testModulus=1000, testExponentialPower=9223372036854775807]
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Fri Sep 14 09:51:32 IST 2018]; root of context hierarchy
Sep 14, 2018 9:51:32 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
MedicalInsurence [insurencePolicyNumber=10, insuredAmount=15000, bonusAmount=2000]
Employee [id=100, name=Peter, testAdd=17000, testSubtraction=13000, testMultiplication=30000000, testDivision=7, testModulus=1000, testExponentialPower=9223372036854775807]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring%20EL_Mathematical_Op_XML.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_Mathematical_Op_XML
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/bc57993ee6a8afd4aea41a3f35b305677f5544e1/Spring_2018/SpringDemo_Spring%20EL_Mathematical_Op_XML/?at=master
See also:
No comments:
Post a Comment