Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: Dependency Injection with SpEL via XML
In Spring applications, Dependency Injection (DI) in XML is commonly achieved using the ref attribute. However, the Spring Expression Language (SpEL) provides an expressive, flexible alternative by allowing you to inject bean references and dependencies directly inside the value attribute using expression evaluation.
In this guide, you will learn how to perform Dependency Injection using SpEL within an XML-based configuration.
How SpEL-Based Dependency Injection Works in XML
SpEL expressions allow you to wire beans and properties dynamically during container startup:
-
Injecting Bean Dependencies: Wire a dependency bean reference directly using the
valueattribute:<property name="item" value="#{itemBean}" />. - Flexible Bean Wiring: Inject bean references or extracted properties using a unified expression syntax.
- Dynamic Evaluation: Resolve target beans and their dependencies dynamically at runtime during ApplicationContext initialization.
- Clear Declarative Setup: Maintain readable and flexible configuration files without altering your Java source code.
Step-by-Step XML Configuration
-
Define the Dependency Bean: Declare the source bean in your XML file with an
idand its respective properties. -
Configure the Dependent Bean: In the dependent bean definition, use the
<property>tag and supply the SpEL expression referencing the dependency bean:
<property name="address" value="#{addressBean}" /> -
Container Initialization: When the
ApplicationContextloads, Spring resolves the expression and injects the dependency bean automatically.
Recommended Next Videos from Ram N Java
Click here to watch on Youtube:
https://www.youtube.com/watch?v=QuNFQXj20dM&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| How to do Dependency Injection using Spring Expression Language SpEL(XML) | Spring Tutorial |
| How to do Dependency Injection using Spring Expression Language SpEL(XML) | Spring Tutorial |
| How to do Dependency Injection using Spring Expression Language SpEL(XML) | Spring Tutorial |
<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;
public class Address
{
private String city;
private String state;
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 [city=" + city + ", state=" + state + "]";
}
}
public class Address
{
private String city;
private String state;
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 [city=" + city + ", state=" + state + "]";
}
}
Employee.java
package com.ram.model;
public class Employee
{
private int id;
private String name;
private String employeeState;
private Address address;
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 Address getAddress()
{
return address;
}
public void setAddress(Address address)
{
this.address = address;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", employeeState="
+ employeeState + ", address=" + address + "]";
}
}
public class Employee
{
private int id;
private String name;
private String employeeState;
private Address address;
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 Address getAddress()
{
return address;
}
public void setAddress(Address address)
{
this.address = address;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", employeeState="
+ employeeState + ", address=" + address + "]";
}
}
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="address" class="com.ram.model.Address">
<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="address" value="#{address}"></property>
<property name="employeeState" value="#{address.state}"></property>
</bean>
</beans>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="address" class="com.ram.model.Address">
<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="address" value="#{address}"></property>
<property name="employeeState" value="#{address.state}"></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);
}
}
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
Aug 30, 2018 11:14:01 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Thu Aug 30 11:14:01 IST 2018]; root of context hierarchy
Aug 30, 2018 11:14:02 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, employeeState=TamilNadu, address=Address [city=Chennai, state=TamilNadu]]
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Thu Aug 30 11:14:01 IST 2018]; root of context hierarchy
Aug 30, 2018 11:14:02 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, employeeState=TamilNadu, address=Address [city=Chennai, state=TamilNadu]]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring_EL_XML.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring_EL_XML
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/02e04aa1b68a77d4f5a01ebf111e80370bd99ca8/Spring_2018/SpringDemo_Spring_EL_XML/?at=master
See also:
No comments:
Post a Comment