Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: Ternary Operator in SpEL
The Spring Expression Language (SpEL) supports inline conditional logic using the classic ternary operator (if-then-else). Rather than writing conditional statements in Java or setting default properties manually, you can evaluate a condition on the fly and inject the appropriate value directly into your beans using the @Value annotation.
In this guide, you will learn how to write ternary expressions using annotation configuration in your Spring applications.
Understanding the Ternary Syntax in SpEL
The ternary operator follows standard Java syntax: Condition ? trueValue : falseValue:
-
Inline Conditional Logic: Evaluates a boolean condition and selects one of two branches:
@Value("#{beanName.score > 50 ? 'Pass' : 'Fail'}"). - Dynamic Value Resolution: The values returned can be literals, calculated values, or references to properties on other beans.
- Cleaner Code: Eliminates boilerplate initialization methods or factory beans by embedding simple decision logic directly in property injection.
Step-by-Step Configuration
- Define the Condition: Formulate the test expression using relational or logical operators (e.g., checking numeric thresholds or boolean flags).
-
Apply @Value: Place the ternary expression inside
@Value("#{...}")above your target field. - Run the Container: During bean creation, Spring evaluates the condition and injects the corresponding true or false branch value.
Recommended Next Videos from Ram N Java
Click here to watch on Youtube:
https://www.youtube.com/watch?v=qbhmXveLU50&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring expression language ternary operator (if-then-else) example [Annotation] | Spring Tutorial |
| Spring expression language ternary operator (if-then-else) example [Annotation] | Spring Tutorial |
| Spring expression language ternary operator (if-then-else) example [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>
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>
Address.java
package com.ram.model;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("address")
public class Address
{
@Value("A220 Bridge Appartment")
private String street;
@Value("Chennai")
private String city;
@Value("TamilNadu")
private String state;
public String getStreet()
{
return street;
}
public void setStreet(String street)
{
this.street = street;
}
public String getCity()
{
return city;
}
public void setCity(String city)
{
this.city = city;
}
public String getState()
{
return state;
}
public void setState(String state)
{
this.state = state;
}
@Override
public String toString()
{
return "Address [street=" + street + ", city=" + city + ", state="
+ state + "]";
}
}
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("address")
public class Address
{
@Value("A220 Bridge Appartment")
private String street;
@Value("Chennai")
private String city;
@Value("TamilNadu")
private String state;
public String getStreet()
{
return street;
}
public void setStreet(String street)
{
this.street = street;
}
public String getCity()
{
return city;
}
public void setCity(String city)
{
this.city = city;
}
public String getState()
{
return state;
}
public void setState(String state)
{
this.state = state;
}
@Override
public String toString()
{
return "Address [street=" + street + ", city=" + city + ", state="
+ state + "]";
}
}
Employee.java
package com.ram.model;
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("#{address.state == 'TamilNadu' ? true : false}")
private boolean southIndian;
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 isSouthIndian()
{
return southIndian;
}
public void setSouthIndian(boolean southIndian)
{
this.southIndian = southIndian;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", southIndian="
+ southIndian + "]";
}
}
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("#{address.state == 'TamilNadu' ? true : false}")
private boolean southIndian;
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 isSouthIndian()
{
return southIndian;
}
public void setSouthIndian(boolean southIndian)
{
this.southIndian = southIndian;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", southIndian="
+ southIndian + "]";
}
}
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>
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;
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);
}
}
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 11, 2018 9:55:26 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Tue Sep 11 09:55:26 IST 2018]; root of context hierarchy
Sep 11, 2018 9:55:26 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, southIndian=true]
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Tue Sep 11 09:55:26 IST 2018]; root of context hierarchy
Sep 11, 2018 9:55:26 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, southIndian=true]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring%20EL_ternary_annotation.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_ternary_annotation
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/f389325f2b5a5d77bebac031ba7115499b6c7807/Spring_2018/SpringDemo_Spring%20EL_ternary_annotation/?at=master
See also:
No comments:
Post a Comment