Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: 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 asMathorString) can be referenced without writing the full package name, e.g.,T(java.lang.Math)or simplyT(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:
-
Static Constant Injection:
<property name="piValue" value="#{T(java.lang.Math).PI}" /> -
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 |
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
public class Address
{
public static String STATE = "Karnataka";
public static String COUNTRY = "India";
public static String getFullAddres()
{
return STATE + "," + COUNTRY;
}
}
Employee.java
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
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
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
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:
No comments:
Post a Comment