Wednesday, 24 October 2018

Mathematical operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial

Master Spring & Java Development!

Subscribe to Ram N Java for clean, beginner-friendly coding guides!

🔔 Subscribe to Ram N Java

Mathematical 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 (/ or div): Divides numbers using standard slashes or the textual div keyword: @Value("#{100 / 4}") or @Value("#{100 div 4}").
  • Modulus (% or mod): Returns division remainder using % or the mod keyword: @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:

  1. Literal Arithmetic: Perform calculations directly with numbers inside the expression delimiter: @Value("#{25 * 4 + 10}").
  2. Dynamic Bean Property Arithmetic: Calculate values based on other existing beans or properties: @Value("#{orderBean.price * 0.18}").
  3. 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


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>

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 + "]";
    }
}

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
                + "]";
    }

}

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>

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);
    }

}

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]

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:

  • All JavaEE Videos Playlist
  • All JavaEE Videos
  • All JAVA EE Links
  • Spring Tutorial
  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • Java Collection Framework Tutorial
  • JAVA Tutorial
  • Kids Tutorial
  • Cooking Tutorial
  • No comments:

    Post a Comment

    Tutorials