Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: Relational Operators in SpEL
The Spring Expression Language (SpEL) provides full support for relational operators to compare values, expressions, and properties dynamically during container startup. When developing with Spring annotations, these operators allow you to evaluate conditions and inject boolean comparison results directly into your beans using the @Value annotation.
In this guide, you will learn how to use relational and comparison operators within SpEL using annotation configuration.
Supported Relational Operators
SpEL supports standard mathematical comparison symbols along with their alphanumeric textual aliases:
-
Equal (
==/eq): Checks if two values are equal:@Value("#{100 == 100}")or@Value("#{100 eq 100}"). -
Not Equal (
!=/ne): Checks if two values are not equal:@Value("#{10 != 20}")or@Value("#{10 ne 20}"). -
Less Than (
</lt): Verifies if the left operand is less than the right:@Value("#{50 < 100}")or@Value("#{50 lt 100}"). -
Less Than or Equal (
<=/le): Verifies if the value is less than or equal:@Value("#{50 <= 50}")or@Value("#{50 le 50}"). -
Greater Than (
>/gt): Checks if the left operand is greater:@Value("#{100 > 50}")or@Value("#{100 gt 50}"). -
Greater Than or Equal (
>=/ge): Checks if the value is greater than or equal:@Value("#{100 >= 100}")or@Value("#{100 ge 100}").
Configuring Comparisons with @Value
You can evaluate comparison expressions directly on your component properties:
-
Field Annotation: Annotate a
booleanproperty using the expression:@Value("#{25 lt 50}"). -
Comparing Bean Properties: Compare dynamic properties across beans:
@Value("#{orderBean.totalPrice ge 500}"). - Container Evaluation: When Spring initializes the bean, it resolves the expression 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=O_L73ccoy_Q&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Relational operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
| Relational operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
| Relational operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
pom.xml
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
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("medicalInsurence")
public class MedicalInsurence
{
@Value("1919191")
private int insurencePolicyNumber;
@Value("15000")
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;
}
@Override
public String toString()
{
return "MedicalInsurence [insurencePolicyNumber="
+ insurencePolicyNumber + ", insuredAmount=" + insuredAmount
+ "]";
}
}
Employee.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("employee")
public class Employee
{
@Value("100")
private int id;
@Value("Peter")
private String name;
@Value("#{medicalInsurence.insuredAmount == 10000}")
private boolean insuredAmountEqualTo10000;
@Value("#{medicalInsurence.insuredAmount != 10000}")
private boolean insuredAmountNotEqualTo10000;
@Value("#{medicalInsurence.insuredAmount lt 10000}")
private boolean insuredAmountLessThan10000;
@Value("#{medicalInsurence.insuredAmount le 10000}")
private boolean insuredAmountLessThanOrEqualTo10000;
@Value("#{medicalInsurence.insuredAmount gt 10000}")
private boolean insuredAmountGreaterThan10000;
@Value("#{medicalInsurence.insuredAmount ge 10000}")
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
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
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
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Wed Sep 12 10:29:00 IST 2018]; root of context hierarchy
Sep 12, 2018 10:29:00 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
MedicalInsurence [insurencePolicyNumber=1919191, insuredAmount=15000]
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_Annotation.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_Relational_Op_Annotation
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/e9c84a0f943aefbd0dd1e4776d7594927120b0b9/Spring_2018/SpringDemo_Spring%20EL_Relational_Op_Annotation/?at=master
See also:
No comments:
Post a Comment