Free Data Structures and Algorithms Course









Subscribe below and get all best seller courses for free !!!










OR



Subscribe to all free courses

How to provide constructor initialization to a bean using constructor-arg tag in configuration file of Spring Framework ?.

A simple example to demonstrate, how to provide constructor initialization to a bean using constructor-arg tag in configuration file of Spring Framework

-------- Scenario 1 ----------

1. Create a normal class having constructor say 'Dog' -


package com.hubberspot.spring;


public class Dog {

 private String breed;
 private int teeth;

 // Scenario 1 : Overloaded Constructor
 public Dog(String breed, int teeth){
  this.breed = breed;
  this.teeth = teeth;
 }

 /* Scenario 2 : both strings 
    public Dog(String breed, String teeth){
  this.breed = breed;
  //this.teeth = teeth;
 }*/
 // Generating getters and setters
 // for all the properties of Dog

 public int getTeeth() {
  return teeth;
 }


 public void setTeeth(int teeth) {
  this.teeth = teeth;
 }


 public String getBreed() {
  return breed;
 }

 public void setBreed(String breed) {
  this.breed = breed;
 }

 public void move() {
  System.out.println("A Dog of breed "+ getBreed() +", " +
    "having "+ getTeeth() +" teeth moves slowly ...");
 }

}




2. Create a spring.xml file placed in classpath of your application -


1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" 
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

 <!-- In order to create an object of bean we define its properties in bean 
  tag. The 'id' attribute value can be thought of as a reference to 'class' 
  attribute value -->
 <bean id="dog" class="com.hubberspot.spring.Dog">

  <!-- Spring takes value in the form of String and converts it to necessary 
   primitive type internally. Here 20 is taken as String, converted to int and 
   constructor with parameters as String , int is called. -->

  <constructor-arg value="shepherd"></constructor-arg>
  <constructor-arg value="20"></constructor-arg>

 </bean>
</beans>


3. Create a Test class for the application (imp) -


package com.hubberspot.spring;

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


public class WildLifeApplication {

 public static void main(String[] args) {

  // ApplicationContext is a Spring interface which 
  // provides with the configuration for an application. 
  // It provides us with all the methods that BeanFactory 
  // provides. It loads the file resources in a older 
  // and generic manner. It helps us to publish events to the
  // listener registered to it. It also provides quick support
  // for internationalization. It provides us with the object 
  // requested, it reads the configuration file and provides
  // us with the necessary object required.
  // We are using concrete implementation of ApplicationContext
  // here called as ClassPathXmlApplicationContext because this 
  // bean factory reads the xml file placed in the classpath of 
  // our application. We provide ClassPathXmlApplicationContext
  // with a configuration file called as spring.xml placed
  // at classpath of our application. 
  ApplicationContext context = 
    new ClassPathXmlApplicationContext(("spring.xml"));

  // In order to get a object instantiated for a particular bean 
  // we call getBean() method of ClassPathXmlApplicationContext
  // passing it the id for which the object is to be needed. 
  // Here getBean() returns an Object. We need to cast it back 
  // to the Dog object. Without implementing new keyword we 
  // have injected object of Dog just by reading an xml 
  // configuration file.
  Dog dog = (Dog)context.getBean("dog");

  // Calling our functionality
  dog.move();

 }

}



Output of the Scenario 1 :







-------- Scenario 2 ----------

If Scenario 2 in Dog.java is un-commented than the Spring cannot identify which constructor to call, so it goes by calling Dog(String , String) constructor and prints the following output : 

Output of the Scenario 2 :
 






-------- Scenario 3 ----------

If Scenario 1 is run with following spring.xml changes below -

<bean id="dog" class="com.hubberspot.spring.Dog">

  <constructor-arg value="shepherd"></constructor-arg>
  <constructor-arg value="twenty"></constructor-arg>

 </bean>



Output of the Scenario 3 :













Scenario 1 and Scenario 3, have only one change instead of providing value as 20 we have provided "twenty" a String value. Spring cannot convert "twenty" to int and throws java.lang.NumberFormatException. Think of it as Spring cannot perform something like    Integer.parseInt("String") .    


 
© 2021 Learn Java by Examples Template by Hubberspot