Tuesday, 16 October 2018

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

Master Spring & Java Development!

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

🔔 Subscribe to Ram N Java

Overview: Relational Operators in SpEL via XML

The Spring Expression Language (SpEL) allows you to evaluate relational and comparison expressions directly inside your Spring XML configuration files. By evaluating these conditions during bean configuration, you can inject evaluated boolean flags into your bean properties without writing additional logic in Java.

In this guide, you will learn how to write relational comparisons using both textual aliases and operators within an XML-based bean configuration.

Supported Relational Operators in XML

Because symbols like < and > have special meaning in XML, SpEL provides text-based equivalent aliases to avoid XML parsing and escaping issues:

  • Equal (== / eq): Tests equality between two values or properties: value="#{100 eq 100}".
  • Not Equal (!= / ne): Checks whether two values are distinct: value="#{100 ne 200}".
  • Less Than (lt): Replaces < cleanly in XML: value="#{10 lt 20}".
  • Less Than or Equal (le): Replaces <= in XML: value="#{10 le 20}".
  • Greater Than (gt): Replaces > cleanly in XML: value="#{20 gt 10}".
  • Greater Than or Equal (ge): Replaces >= in XML: value="#{20 ge 20}".

Configuring Comparisons in XML

To configure comparison expressions inside your Spring bean XML definition:

  1. Identify Property: Define your bean and target boolean property name.
  2. Set Value Expression: Supply the relational expression within the value attribute using text aliases:
    <property name="isEligible" value="#{personBean.age ge 18}" />
  3. Container Initialization: Spring resolves the condition upon loading the application context and sets the boolean flag automatically.

Recommended Next Videos from Ram N Java


Click here to watch on Youtube:
https://www.youtube.com/watch?v=2HcEA0E_SiU&list=UUhwKlOVR041tngjerWxVccw

Click the below Image to Enlarge:
Relational operators in Spring Expression Language SpEL [XML] | Spring Tutorial

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

Relational 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;

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

}

Employee.java

package com.ram.model;

public class Employee
{
    private int id;
    private String name;

    private boolean insuredAmountEqualTo10000;
    private boolean insuredAmountNotEqualTo10000;
    private boolean insuredAmountLessThan10000;
    private boolean insuredAmountLessThanOrEqualTo10000;
    private boolean insuredAmountGreaterThan10000;
    private boolean insuredAmountGreaterThanOrEqualTo10000;

    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 boolean isInsuredAmountEqualTo10000()
    {
        return insuredAmountEqualTo10000;
    }

    public void setInsuredAmountEqualTo10000(boolean insuredAmountEqualTo10000)
    {
        this.insuredAmountEqualTo10000 = insuredAmountEqualTo10000;
    }

    public boolean isInsuredAmountNotEqualTo10000()
    {
        return insuredAmountNotEqualTo10000;
    }

    public void setInsuredAmountNotEqualTo10000(
            boolean insuredAmountNotEqualTo10000)
    {
        this.insuredAmountNotEqualTo10000 = insuredAmountNotEqualTo10000;
    }

    public boolean isInsuredAmountLessThan10000()
    {
        return insuredAmountLessThan10000;
    }

    public void setInsuredAmountLessThan10000(
            boolean insuredAmountLessThan10000)
    {
        this.insuredAmountLessThan10000 = insuredAmountLessThan10000;
    }

    public boolean isInsuredAmountLessThanOrEqualTo10000()
    {
        return insuredAmountLessThanOrEqualTo10000;
    }

    public void setInsuredAmountLessThanOrEqualTo10000(
            boolean insuredAmountLessThanOrEqualTo10000)
    {
        this.insuredAmountLessThanOrEqualTo10000 = insuredAmountLessThanOrEqualTo10000;
    }

    public boolean isInsuredAmountGreaterThan10000()
    {
        return insuredAmountGreaterThan10000;
    }

    public void setInsuredAmountGreaterThan10000(
            boolean insuredAmountGreaterThan10000)
    {
        this.insuredAmountGreaterThan10000 = insuredAmountGreaterThan10000;
    }

    public boolean isInsuredAmountGreaterThanOrEqualTo10000()
    {
        return insuredAmountGreaterThanOrEqualTo10000;
    }

    public void setInsuredAmountGreaterThanOrEqualTo10000(
            boolean insuredAmountGreaterThanOrEqualTo10000)
    {
        this.insuredAmountGreaterThanOrEqualTo10000 = insuredAmountGreaterThanOrEqualTo10000;
    }

    @Override
    public String toString()
    {
        return "Employee [id=" + id + ", name=" + name
                + ", insuredAmountEqualTo10000=" + insuredAmountEqualTo10000
                + ", insuredAmountNotEqualTo10000="
                + insuredAmountNotEqualTo10000 + ", insuredAmountLessThan10000="
                + insuredAmountLessThan10000
                + ", insuredAmountLessThanOrEqualTo10000="
                + insuredAmountLessThanOrEqualTo10000
                + ", insuredAmountGreaterThan10000="
                + insuredAmountGreaterThan10000
                + ", insuredAmountGreaterThanOrEqualTo10000="
                + insuredAmountGreaterThanOrEqualTo10000 + "]";
    }

}

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="1919191"></property>
        <property name="insuredAmount" value="15000"></property>
    </bean>

    <bean id="employee" class="com.ram.model.Employee">
        <property name="id" value="100"></property>
        <property name="name" value="Peter"></property>

        <property name="insuredAmountEqualTo10000" value="#{medicalInsurence.insuredAmount == 10000}"></property>
        <property name="insuredAmountNotEqualTo10000" value="#{medicalInsurence.insuredAmount != 10000}"></property>

        <property name="insuredAmountLessThan10000" value="#{medicalInsurence.insuredAmount lt 10000}"></property>
        <property name="insuredAmountLessThanOrEqualTo10000" value="#{medicalInsurence.insuredAmount le 10000}"></property>

        <property name="insuredAmountGreaterThan10000" value="#{medicalInsurence.insuredAmount gt 10000}"></property>
        <property name="insuredAmountGreaterThanOrEqualTo10000" value="#{medicalInsurence.insuredAmount ge 10000}"></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);
    }

}

Output

Sep 12, 2018 9:54:09 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Wed Sep 12 09:54:09 IST 2018]; root of context hierarchy
Sep 12, 2018 9:54:09 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, insuredAmountEqualTo10000=false, insuredAmountNotEqualTo10000=true, insuredAmountLessThan10000=false, insuredAmountLessThanOrEqualTo10000=false, insuredAmountGreaterThan10000=true, insuredAmountGreaterThanOrEqualTo10000=true]

Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring%20EL_Relational_Op_XML.zip?attredirects=0&d=1

Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_Relational_Op_XML

Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/e9c84a0f943aefbd0dd1e4776d7594927120b0b9/Spring_2018/SpringDemo_Spring%20EL_Relational_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