Monday, 15 October 2018

Spring expression language ternary operator (if-then-else) example [Annotation] | Spring Tutorial

Master Spring & Java Development!

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

🔔 Subscribe to Ram N Java

Overview: 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

  1. Define the Condition: Formulate the test expression using relational or logical operators (e.g., checking numeric thresholds or boolean flags).
  2. Apply @Value: Place the ternary expression inside @Value("#{...}") above your target field.
  3. 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>

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

}

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

}

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>

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

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:

  • 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