Wednesday, 24 October 2018

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

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 Channel

What 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 (/ or div): Computes quotients between values.
  • Modulus (% or mod): Returns the remainder of an integer division.
  • Exponential Power (^): Calculates powers (e.g., #{2 ^ 3} evaluates to 8).

Execution Lifecycle in Spring Container

  1. Configuration Loading: The ApplicationContext reads the XML file defining source and target beans.
  2. Source Bean Instantiation: The container creates the source bean (e.g., medicalInsurance) with its initial properties.
  3. Expression Evaluation: While configuring dependent beans (e.g., employee), SpEL evaluates mathematical expressions dynamically.
  4. 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
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;

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

}

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>

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 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]

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:

  • 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