Friday, 26 October 2018

Spring Expression Language – Referencing Static Methods and Members [XML] | Spring Tutorial

Master Spring & Java Development!

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

🔔 Subscribe to Ram N Java

Overview: Static Methods and Fields in SpEL

The Spring Expression Language (SpEL) gives developers the flexibility to compute and evaluate values dynamically at container startup. Beyond accessing standard bean properties, SpEL provides a clean way to reference static fields, constants, and static utility methods directly inside your configuration.

In this tutorial, you will discover how to invoke static methods and reference static class members inside an XML-based bean configuration file.

Using the Type Operator T(...) in XML

In SpEL, the T() operator is used to target a specific Java class instance:

  • Standard Types: Built-in types located in java.lang (such as Math or String) can be referenced without writing the full package name, e.g., T(java.lang.Math) or simply T(Math).
  • Custom Classes: Any user-defined class or external library class requires its fully qualified package path.

Injecting Properties via <property> Value

Inside your Spring bean definition XML, you can evaluate SpEL expressions inside the value attribute using the #{...} delimiter:

  1. Static Constant Injection: <property name="piValue" value="#{T(java.lang.Math).PI}" />
  2. Static Method Execution: <property name="randomNumber" value="#{T(java.lang.Math).random()}" />

Recommended Next Videos from Ram N Java


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

Click the below Image to Enlarge:


Spring Expression Language – Referencing Static Methods and Members [XML] | Spring Tutorial

Spring Expression Language – Referencing Static Methods and Members [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>

Address.java

package com.ram.model;

public class Address
{
    public static String STATE = "Karnataka";
    public static String COUNTRY = "India";

    public static String getFullAddres()
    {
        return STATE + "," + COUNTRY;
    }
}

Employee.java

package com.ram.model;

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

    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 String getEmployeeState()
    {
        return employeeState;
    }

    public void setEmployeeState(String employeeState)
    {
        this.employeeState = employeeState;
    }

    public String getEmployeeFullAddress()
    {
        return employeeFullAddress;
    }

    public void setEmployeeFullAddress(String employeeFullAddress)
    {
        this.employeeFullAddress = employeeFullAddress;
    }

    @Override
    public String toString()
    {
        return "Employee [id=" + id + ", name=" + name + ", employeeState="
                + employeeState + ", employeeFullAddress=" + employeeFullAddress
                + "]";
    }

}

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="employee" class="com.ram.model.Employee">
        <property name="id" value="10"></property>
        <property name="name" value="Peter"></property>
        <property name="employeeState" value="#{T(com.ram.model.Address).STATE}"></property>
        <property name="employeeFullAddress" value="#{T(com.ram.model.Address).getFullAddres()}"></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(employee);
    }

}

Output

Sep 25, 2018 10:13:30 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Tue Sep 25 22:13:30 IST 2018]; root of context hierarchy
Sep 25, 2018 10:13:31 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Employee [id=10, name=Peter, employeeState=Karnataka, employeeFullAddress=Karnataka,India]

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

Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_access_static_XML

Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/41b19a6ea5ff82d0f409d467c69dd68cdbbf4a93/Spring_2018/SpringDemo_access_static_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