Wednesday, 3 October 2018

Spring expression language method invocation (XML) | Spring Tutorial | Spring Framework

Master Spring & Java Development!

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

🔔 Subscribe to Ram N Java

Overview: Method Invocation in SpEL via XML

The Spring Expression Language (SpEL) allows you to execute methods on Spring beans or standard Java objects dynamically within your XML configuration files. Instead of writing custom factory beans or initialization methods in Java, SpEL enables you to invoke methods and inject their return values directly into bean properties during container startup.

In this guide, you will learn how to configure method invocations—both with and without arguments—inside an XML-based bean configuration.

Understanding Method Invocation Syntax in XML

SpEL supports standard Java method call syntax inside expression delimiters:

  • Calling Bean Methods: Execute methods on other managed Spring beans: value="#{serviceBean.getMessage()}".
  • Passing Arguments: Pass literal values, numbers, or bean properties as parameters: value="#{calculatorBean.add(10, 20)}".
  • Calling Methods on String Literals: Execute utility methods on literal objects: value="#{'Spring Framework'.toUpperCase()}".
  • Method Chaining: Chain multiple method calls together: value="#{beanName.getName().trim().toLowerCase()}".

Configuring Method Invocations in XML

To invoke a method and inject its result into a target bean property:

  1. Configure the Source Bean: Define the Spring bean containing the business method you wish to call.
  2. Use <property> with SpEL: In your dependent bean definition, specify the method call in the value attribute:
    <property name="greeting" value="#{greetingService.sayHello('Ram')}" />
  3. Container Initialization: When the ApplicationContext initializes, Spring invokes the method and assigns the returned value to the property.

Recommended Next Videos from Ram N Java


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

Click the below Image to Enlarge:

Spring expression language method invocation (XML) | Spring Tutorial | Spring Framework

Spring expression language method invocation (XML) | Spring Tutorial | Spring Framework

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
{
    private String street;

    private String city;

    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;
    }

    public String getFullAddress()
    {
        return street + "," + city + "," + state;
    }

    @Override
    public String toString()
    {
        return "Address [street=" + street + ", city=" + city + ", state="
                + state + "]";
    }

}

Employee.java

package com.ram.model;

public class Employee
{
    private int id;

    private String name;

    private String fullAddress;

    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 getFullAddress()
    {
        return fullAddress;
    }

    public void setFullAddress(String fullAddress)
    {
        this.fullAddress = fullAddress;
    }

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

}

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="address" class="com.ram.model.Address">
        <property name="street" value="A220 Bridge Appartment"></property>
        <property name="city" value="Chennai"></property>
        <property name="state" value="TamilNadu"></property>
    </bean>


    <bean id="employee" class="com.ram.model.Employee">
        <property name="id" value="100"></property>
        <property name="name" value="Peter"></property>
        <property name="fullAddress" value="#{address.getFullAddress()}"></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(
                "Got employee object from the ApplicationContext(Spring Container)");
        System.out.println(employee);
    }

}

Output

Sep 03, 2018 9:41:15 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Mon Sep 03 09:41:15 IST 2018]; root of context hierarchy
Sep 03, 2018 9:41:15 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, fullAddress=A220 Bridge Appartment,Chennai,TamilNadu]

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

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

Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/13d8c90b997048bdc5084bfdce013eb8d2ccb438/Spring_2018/SpringDemo_Spring_EL_method_invocation_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