Enjoying this Java & Spring tutorial?
Subscribe to Ram N Java on YouTubeIntroduction
In Spring Framework applications, configuring collections via constructor injection allows beans to remain immutable and completely initialized upon creation. A frequent use case involves mapping a basic identifier (like a String or Integer key) to a custom dependent object as the map value.
In this guide, you will learn step-by-step how to inject a Map having a simple key and a dependent object as its value using constructor dependency injection in Spring XML configuration.
1. Create the Dependent Class (Fruit)
First, define the dependent object class (for example, Fruit) that will serve as the value inside our map:
public class Fruit {
private String name;
private int price;
public Fruit(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Fruit [name=" + name + ", price=" + price + "]";
}
}
2. Create the Target Class (FruitShop)
Create the target class FruitShop that receives a Map<String, Fruit> through its constructor:
import java.util.Map;
public class FruitShop {
private String shopName;
private Map<String, Fruit> fruitMap;
public FruitShop(String shopName, Map<String, Fruit> fruitMap) {
this.shopName = shopName;
this.fruitMap = fruitMap;
}
public void displayFruitShopInfo() {
System.out.println("Shop Name: " + shopName);
for (Map.Entry<String, Fruit> entry : fruitMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + " -> Value: " + entry.getValue());
}
}
}
3. Configure Spring XML with <entry key="..." value-ref="...">
In your applicationContext.xml, declare the dependent Fruit beans and inject them into the target bean's map using the value-ref attribute:
<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.xsd">
<!-- Dependent Beans -->
<bean id="appleBean" class="Fruit">
<constructor-arg value="Kashmiri Apple" />
<constructor-arg value="120" />
</bean>
<bean id="mangoBean" class="Fruit">
<constructor-arg value="Alphonso Mango" />
<constructor-arg value="250" />
</bean>
<!-- Target Bean -->
<bean id="fruitShop" class="FruitShop">
<constructor-arg value="Green Valley Mart" />
<constructor-arg>
<map>
<entry key="fruit_1" value-ref="appleBean" />
<entry key="fruit_2" value-ref="mangoBean" />
</map>
</constructor-arg>
</bean>
</beans>
4. Test the Application
Load the application context and execute your application:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
FruitShop shop = (FruitShop) context.getBean("fruitShop");
shop.displayFruitShopInfo();
}
}
Watch More Spring Tutorials
Click here to watch on Youtube:
https://www.youtube.com/watch?v=WPk0U8vG-JA&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| How to Inject Map having dependent Object in value using Spring dependency injection by constructor? |
| How to Inject Map having dependent Object in value using Spring dependency injection by constructor? |
| How to Inject Map having dependent Object in value using Spring dependency injection by constructor? |
| How to Inject Map having dependent Object in value using Spring dependency injection by constructor? |
| How to Inject Map having dependent Object in value using Spring dependency injection by constructor? |
No comments:
Post a Comment