Thursday, 23 March 2017

Spring: Inject bean as constructor argument using c name space

In my previous post, I explained how to inject arguments to a constructor using c-namespace. In this post, I am going to explain how to inject a bean using c-namespace.

Example       
 <bean id="osho" class="com.sample.pojo.Author">
  <constructor-arg name="firstName" value="Chandra Mohan" />
  <constructor-arg name="lastName" value="Jain" />
  <constructor-arg name="dateOfBirth" value="11 December 1931" />
  <constructor-arg name="country" value="India" />
 </bean>

 <bean id="bookOfSecrets" name="book1" class="com.sample.pojo.Book">
  <constructor-arg name="author" ref="osho" />
  <constructor-arg name="title" value="The Book Of Secrets" />
  <constructor-arg name="noOfPages" value="1152" />
  <constructor-arg name="price" value="452" />
 </bean>

Notify above snippet, I am injecting author bean into the bean with id book1. Same snippet can be re-written using c-namespace like below.

 <bean id="osho" name="osho" class="com.sample.pojo.Author"
  c:firstName="Chandra Mohan" c:lastName="Jain" c:dateOfBirth="11 December 1931"
  c:country="india" />

 <bean id="bookOfSecrets" name="book1" class="com.sample.pojo.Book"
  c:title="Vedanta An Art of Dying" c:noOfPages="164" c:price="90"
  c:author-ref="osho" />

Notify above snippet constructor argument ‘author’ of the instance book1 is defined as c:author-ref="osho". In this case author is the argument name, whereas the -ref part indicates that this is not a straight value but rather a reference to another bean.
  
Following is the complete working application.


Author.java
package com.sample.pojo;

public class Author {
 private String firstName;
 private String lastName;
 private String dateOfBirth;
 private String country;

 public Author(String firstName, String lastName, String dateOfBirth, String country) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.dateOfBirth = dateOfBirth;
  this.country = country;
 }

 public String getFirstName() {
  return firstName;
 }

 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }

 public String getLastName() {
  return lastName;
 }

 public void setLastName(String lastName) {
  this.lastName = lastName;
 }

 public String getDateOfBirth() {
  return dateOfBirth;
 }

 public void setDateOfBirth(String dateOfBirth) {
  this.dateOfBirth = dateOfBirth;
 }

 public String getCountry() {
  return country;
 }

 public void setCountry(String country) {
  this.country = country;
 }

 @Override
 public String toString() {
  StringBuilder builder = new StringBuilder();
  builder.append("Author [firstName=").append(firstName).append(", lastName=").append(lastName)
    .append(", dateOfBirth=").append(dateOfBirth).append(", country=").append(country).append("]");
  return builder.toString();
 }

}


Book.java

package com.sample.pojo;

public class Book {
 private String title;
 private int noOfPages;
 private float price;
 private Author author;
 
 public Book(String title, int noOfPages, float price, Author author){
  this.title = title;
  this.noOfPages = noOfPages;
  this.price = price;
  this.author = author;
 }

 public String getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title = title;
 }

 public int getNoOfPages() {
  return noOfPages;
 }

 public void setNoOfPages(int noOfPages) {
  this.noOfPages = noOfPages;
 }

 public float getPrice() {
  return price;
 }

 public void setPrice(float price) {
  this.price = price;
 }

 public Author getAuthor() {
  return author;
 }

 public void setAuthor(Author author) {
  this.author = author;
 }

 @Override
 public String toString() {
  StringBuilder builder = new StringBuilder();
  builder.append("Book [title=").append(title).append(", noOfPages=").append(noOfPages).append(", price=")
    .append(price).append(", author=").append(author).append("]");
  return builder.toString();
 }

}

myConfiguration.xml
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

 <bean id="osho" name="osho" class="com.sample.pojo.Author"
  c:firstName="Chandra Mohan" c:lastName="Jain" c:dateOfBirth="11 December 1931"
  c:country="india" />

 <bean id="bookOfSecrets" name="book1" class="com.sample.pojo.Book"
  c:title="Vedanta An Art of Dying" c:noOfPages="164" c:price="90"
  c:author-ref="osho" />

</beans>

HelloWorld.java

package com.sample.test;

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

import com.sample.pojo.Book;

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

  Book book = context.getBean("book1", Book.class);

  System.out.println(book);

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

Run ‘HelloWorld.java’, you can able to see following output.

Book [title=Vedanta An Art of Dying, noOfPages=164, price=90.0, author=Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=india]]




Previous                                                 Next                                                 Home

No comments:

Post a Comment