Enjoying This Tutorial?
Subscribe to Ram N Java for high-quality, practical Java and Spring tutorials!
SUBSCRIBE NOWIntroduction
In Spring Framework applications, managing one-to-many relationships often requires injecting an ordered collection of custom collaborator objects, such as a java.util.List. The Spring IoC container simplifies this using the <list> element along with <ref bean="..."/> tags to inject a list of dependent beans via setter-based dependency injection.
Why Inject a List of Dependent Objects?
- Preserves Order: A
Listmaintains the insertion sequence of your dependent collaborator beans as specified in your configuration. - Declarative Dependency Wiring: By leveraging nested
<ref bean="..."/>tags inside<list>, Spring connects independent bean definitions cleanly without hardcoded object creation. - Modularity and Loose Coupling: Collaborator beans can be declared, configured, and tested independently before being wired into the consuming class.
Step-by-Step Code Example
Here is an example showing how to inject a List<Address> of dependent objects into an Employee bean using setter injection:
1. The Dependent and Consumer Classes
package com.ram.model;
import java.util.List;
// Dependent Object
public class Address {
private String city;
private String state;
public void setCity(String city) {
this.city = city;
}
public void setState(String state) {
this.state = state;
}
@Override
public String toString() {
return "Address [city=" + city + ", state=" + state + "]";
}
}
// Consumer Class holding the List
public class Employee {
private String name;
private List<Address> addresses;
public void setName(String name) {
this.name = name;
}
// Setter method for List injection
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
public void display() {
System.out.println("Employee Name: " + name);
System.out.println("Addresses:");
for (Address addr : addresses) {
System.out.println(addr);
}
}
}
2. Configuring applicationContext.xml
Define the dependent beans first, then reference them inside the <list> element:
<!-- Dependent Address Beans -->
<bean id="address1" class="com.ram.model.Address">
<property name="city" value="Bangalore" />
<property name="state" value="Karnataka" />
</bean>
<bean id="address2" class="com.ram.model.Address">
<property name="city" value="Hyderabad" />
<property name="state" value="Telangana" />
</bean>
<!-- Employee Bean with List Setter Injection -->
<bean id="employee" class="com.ram.model.Employee">
<property name="name" value="Ram" />
<property name="addresses">
<list>
<ref bean="address1" />
<ref bean="address2" />
</list>
</property>
</bean>
3. Loading and Executing with ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Employee emp = (Employee) context.getBean("employee");
emp.display();
Key Takeaway
Using <list> with nested <ref bean="..."/> elements allows Spring to construct and inject ordered collections of dependent collaborator objects via setter injection, keeping component architectures modular and straightforward to maintain.
Recommended Collection & Dependency Injection Tutorials from Ram N Java
Click here to watch on Youtube:
https://www.youtube.com/watch?v=T-sdh1TBQVY&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| How to Inject List having Dependent Object using Spring dependency injection by Setter method? |
| How to Inject List having Dependent Object using Spring dependency injection by Setter method? |
| How to Inject List having Dependent Object using Spring dependency injection by Setter method? |
| How to Inject List having Dependent Object using Spring dependency injection by Setter method? |
No comments:
Post a Comment