Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: Logical Operators in SpEL
The Spring Expression Language (SpEL) includes extensive support for logical operations, making it easy to evaluate complex conditions dynamically at runtime. When building Spring applications with annotation-based configuration, you can evaluate boolean logic and inject conditional states directly into your beans using the @Value annotation.
In this guide, you will learn about the different logical operators supported by SpEL and how to use them with annotation configuration.
Supported Logical Operators
SpEL supports standard symbols as well as text-based equivalents for logical operators:
-
Logical AND (
and/&&): Evaluates totrueonly if both conditions are true:@Value("#{250 > 200 and 200 < 400}"). -
Logical OR (
or/||): Evaluates totrueif at least one condition is true:@Value("#{250 > 200 or 200 > 400}"). -
Logical NOT (
!/not): Inverts the boolean result of an expression:@Value("#{!(250 > 200)}")or@Value("#{not (250 > 200)}").
Injecting Logical Results with @Value
By placing logical expressions inside the @Value("#{...}") annotation, Spring evaluates them during bean initialization:
-
Direct Boolean Assignment: Assign evaluated condition results directly to
booleanfields. -
Combining Relational and Logical Operations: Chain comparisons seamlessly (e.g., combining
<,>,==withand,or). - Dynamic Bean State Resolution: Conditionally configure beans based on property values or environment flags without boilerplate Java code.
Recommended Next Videos from Ram N Java
Click here to watch on Youtube:
https://www.youtube.com/watch?v=AUILi1PWpJo&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Logical operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
| Logical operators in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
| Logical 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("10")
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 == 15000 and medicalInsurence.insurencePolicyNumber == 10}")
private boolean testAndCondition;
@Value("#{medicalInsurence.insuredAmount == 15000 or medicalInsurence.insurencePolicyNumber == 30}")
private boolean testOrCondition;
@Value("#{medicalInsurence.insuredAmount != 15000}")
private boolean testNotCondition;
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 isTestAndCondition()
{
return testAndCondition;
}
public void setTestAndCondition(boolean testAndCondition)
{
this.testAndCondition = testAndCondition;
}
public boolean isTestOrCondition()
{
return testOrCondition;
}
public void setTestOrCondition(boolean testOrCondition)
{
this.testOrCondition = testOrCondition;
}
public boolean isTestNotCondition()
{
return testNotCondition;
}
public void setTestNotCondition(boolean testNotCondition)
{
this.testNotCondition = testNotCondition;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", testAndCondition="
+ testAndCondition + ", testOrCondition=" + testOrCondition
+ ", testNotCondition=" + testNotCondition + "]";
}
}
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 [Thu Sep 13 09:54:26 IST 2018]; root of context hierarchy
Sep 13, 2018 9:54:26 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
MedicalInsurence [insurencePolicyNumber=10, insuredAmount=15000]
Employee [id=100, name=Peter, testAndCondition=true, testOrCondition=true, testNotCondition=false]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring%20EL_logical_Op_Annotation.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_logical_Op_Annotation
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/bc57993ee6a8afd4aea41a3f35b305677f5544e1/Spring_2018/SpringDemo_Spring%20EL_logical_Op_Annotation/?at=master
See also: