Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaMathematical Operations in SpEL
The Spring Expression Language (SpEL) supports a comprehensive set of mathematical operators right out of the box. Rather than hardcoding calculated values or calculating them in static blocks, SpEL allows you to perform arithmetic calculations dynamically during bean configuration and initialization.
In this guide, you will learn how to use basic and advanced arithmetic operators within SpEL using annotation configuration and the @Value annotation.
Supported Mathematical Operators
SpEL supports standard mathematical operations along with alphanumeric aliases:
-
Addition (
+): Computes numeric sums or performs string concatenation:@Value("#{10 + 20}"). -
Subtraction (
-): Performs subtraction between numeric values:@Value("#{50 - 15}"). -
Multiplication (
*): Multiplies numeric expressions:@Value("#{5 * 8}"). -
Division (
/ordiv): Divides numbers using standard slashes or the textualdivkeyword:@Value("#{100 / 4}")or@Value("#{100 div 4}"). -
Modulus (
%ormod): Returns division remainder using%or themodkeyword:@Value("#{10 % 3}")or@Value("#{10 mod 3}"). -
Exponential Power (
^): Raises a base to an exponent:@Value("#{2 ^ 3}").
Applying Arithmetic Expressions with @Value
You can evaluate mathematical expressions directly on component fields:
-
Literal Arithmetic: Perform calculations directly with numbers inside the expression delimiter:
@Value("#{25 * 4 + 10}"). -
Dynamic Bean Property Arithmetic: Calculate values based on other existing beans or properties:
@Value("#{orderBean.price * 0.18}"). - Automatic Type Coercion: The Spring container evaluates the mathematical expression and assigns the computed numeric type (integer, double, float) seamlessly.
Recommended Next Videos from Ram N Java
- 👉 Mastering Mathematical operators in Spring Expression Language SpEL with XML | Spring Tutorial
- 👉 Mastering Logical Operators in Spring Expression Language (SpEL) with Annotation| Spring Tutorial
- 👉 Spring Expression Language: Referencing Static Methods and Members using Annotation Configuration
Click here to watch on Youtube:
https://www.youtube.com/watch?v=cKkwyv24aN8&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Mathematical operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
| Mathematical operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
| Mathematical operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
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>
MedicalInsurence.java
package com.ram.model;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("medicalInsurence")
public class MedicalInsurence
{
@Value("10")
private int insurencePolicyNumber;
@Value("15000")
private int insuredAmount;
@Value("2000")
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 + "]";
}
}
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("medicalInsurence")
public class MedicalInsurence
{
@Value("10")
private int insurencePolicyNumber;
@Value("15000")
private int insuredAmount;
@Value("2000")
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;
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("#{medicalInsurence.insuredAmount + medicalInsurence.bonusAmount}")
private int testAdd;
@Value("#{medicalInsurence.insuredAmount - medicalInsurence.bonusAmount}")
private int testSubtraction;
@Value("#{medicalInsurence.insuredAmount * medicalInsurence.bonusAmount}")
private int testMultiplication;
@Value("#{medicalInsurence.insuredAmount / medicalInsurence.bonusAmount}")
private int testDivision;
@Value("#{medicalInsurence.insuredAmount % medicalInsurence.bonusAmount}")
private int testModulus;
@Value("#{medicalInsurence.insuredAmount ^ medicalInsurence.bonusAmount}")
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
+ "]";
}
}
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("#{medicalInsurence.insuredAmount + medicalInsurence.bonusAmount}")
private int testAdd;
@Value("#{medicalInsurence.insuredAmount - medicalInsurence.bonusAmount}")
private int testSubtraction;
@Value("#{medicalInsurence.insuredAmount * medicalInsurence.bonusAmount}")
private int testMultiplication;
@Value("#{medicalInsurence.insuredAmount / medicalInsurence.bonusAmount}")
private int testDivision;
@Value("#{medicalInsurence.insuredAmount % medicalInsurence.bonusAmount}")
private int testModulus;
@Value("#{medicalInsurence.insuredAmount ^ medicalInsurence.bonusAmount}")
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">
<context:component-scan base-package="com.ram" />
</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">
<context:component-scan base-package="com.ram" />
</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 10:21:35 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Fri Sep 14 10:21:35 IST 2018]; root of context hierarchy
Sep 14, 2018 10:21:35 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=10, 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 10:21:35 IST 2018]; root of context hierarchy
Sep 14, 2018 10:21:35 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=10, 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_Annotation.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_Mathematical_Op_Annotation
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/bc57993ee6a8afd4aea41a3f35b305677f5544e1/Spring_2018/SpringDemo_Spring%20EL_Mathematical_Op_Annotation/?at=master
See also:
No comments:
Post a Comment