Monday 6 March 2017

Spring: Inject set of beans

In my previous post, I explained about how to inject set of strings. In this post, I am going to explain how to inject set of beans. By using <set> and <ref> elements, you can inject set of beans.

Example
 <bean id="demoCountryCapitals" name="demoCountryCapitals" class="com.sample.pojo.Countries">
  <property name="favoriteCountries">
   <set>
    <ref bean="india" />
    <ref bean="russia" />
   </set>
  </property>
 </bean>
Following is the complete working application.

Country.java
package com.sample.pojo;

public class Country {
 private String name;
 private String capital;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getCapital() {
  return capital;
 }

 public void setCapital(String capital) {
  this.capital = capital;
 }

 @Override
 public String toString() {
  StringBuilder builder = new StringBuilder();
  builder.append("Country [name=").append(name).append(", capital=").append(capital).append("]");
  return builder.toString();
 }

 @Override
 public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + ((capital == null) ? 0 : capital.hashCode());
  result = prime * result + ((name == null) ? 0 : name.hashCode());
  return result;
 }

 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  Country other = (Country) obj;
  if (capital == null) {
   if (other.capital != null)
    return false;
  } else if (!capital.equals(other.capital))
   return false;
  if (name == null) {
   if (other.name != null)
    return false;
  } else if (!name.equals(other.name))
   return false;
  return true;
 }

}

Countries.java
package com.sample.pojo;

import java.util.Set;

public class Countries {
 private Set<Country> favoriteCountries;

 public Set<Country> getFavoriteCountries() {
  return favoriteCountries;
 }

 public void setFavoriteCountries(Set<Country> favoriteCountries) {
  this.favoriteCountries = favoriteCountries;
 }

}


myConfiguration.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">

 <bean id="india" class="com.sample.pojo.Country">
  <property name="name" value="India" />
  <property name="capital" value="New Delhi" />
 </bean>

 <bean id="russia" class="com.sample.pojo.Country">
  <property name="name" value="Russia" />
  <property name="capital" value="Moscow" />
 </bean>

 <bean id="demoCountryCapitals" name="demoCountryCapitals" class="com.sample.pojo.Countries">
  <property name="favoriteCountries">
   <set>
    <ref bean="india" />
    <ref bean="russia" />
   </set>
  </property>
 </bean>

</beans>

HelloWorld.java
package com.sample.test;

import java.util.*;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sample.pojo.Countries;
import com.sample.pojo.Country;

public class HelloWorld {
 public static void main(String args[]) {
  ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "myConfiguration.xml" });

  Countries countries = context.getBean("demoCountryCapitals", Countries.class);

  Set<Country> favoriteCountries = countries.getFavoriteCountries();

  for (Country country : favoriteCountries) {
   System.out.println(country);
  }

  ((ClassPathXmlApplicationContext) context).close();
 }
}

Run HelloWorld.java, you can able to see following output.
Country [name=India, capital=New Delhi]
Country [name=Russia, capital=Moscow]








Previous                                                 Next                                                 Home

No comments:

Post a Comment