Cheap VPS & Xen Server


Residential Proxy Network - Hourly & Monthly Packages

Constructor Injection


We can inject the dependency by constructor. The <constructor-arg> subelement of <bean> is used for constructor injection. Here we are going to inject

  1. primitive and String-based values
  2. Dependent object (contained object)
  3. Collection values etc.

Injecting primitive and string-based values

Let’s see the simple example to inject primitive and string-based values. We have created three files here:

  • Employee.java
  • applicationContext.xml
  • Test.java

Employee.java

It is a simple class containing two fields id and name. There are four constructors and one method in this class.

  1. package com.Kreationnext;
  2. public class Employee {
  3. private int id;
  4. private String name;
  5. public Employee() {System.out.println(“def cons”);}
  6. public Employee(int id) {this.id = id;}
  7. public Employee(String name) {  this.name = name;}
  8. public Employee(int id, String name) {
  9.     this.id = id;
  10.     this.name = name;
  11. }
  12. void show(){
  13.     System.out.println(id+” “+name);
  14. }
  15. }

applicationContext.xml

We are providing the information into the bean by this file. The constructor-arg element invokes the constructor. In such case, parameterized constructor of int type will be invoked. The value attribute of constructor-arg element will assign the specified value. The type attribute specifies that int parameter constructor will be invoked.

  1. <?xml version=“1.0” encoding=“UTF-8”?>
  2. <beans
  3.     xmlns=“http://www.springframework.org/schema/beans”
  4.     xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
  5.     xmlns:p=“http://www.springframework.org/schema/p”
  6.     xsi:schemaLocation=”http://www.springframework.org/schema/beans
  7.                 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd”>
  8. <bean id=“e” class=“com.Kreationnext.Employee”>
  9. <constructor-arg value=“10” type=“int”></constructor-arg>
  10. </bean>
  11. </beans>

Test.java

This class gets the bean from the applicationContext.xml file and calls the show method.

  1. package com.Kreationnext;
  2. import org.springframework.beans.factory.BeanFactory;
  3. import org.springframework.beans.factory.xml.XmlBeanFactory;
  4. import org.springframework.core.io.*;
  5. public class Test {
  6.     public static void main(String[] args) {
  7.         Resource r=new ClassPathResource(“applicationContext.xml”);
  8.         BeanFactory factory=new XmlBeanFactory(r);
  9.         Employee s=(Employee)factory.getBean(“e”);
  10.         s.show();
  11.     }
  12. }

Output:10 null

download this example

Injecting string-based values

If you don’t specify the type attribute in the constructor-arg element, by default string type constructor will be invoked.

  1. ….
  2. <bean id=“e” class=“com.Kreationnext.Employee”>
  3. <constructor-arg value=“10”></constructor-arg>
  4. </bean>
  5. ….

If you change the bean element as given above, string parameter constructor will be invoked and the output will be 0 10.

Output:0 10


You may also pass the string literal as following:

  1. ….
  2. <bean id=“e” class=“com.Kreationnext.Employee”>
  3. <constructor-arg value=“Sonoo”></constructor-arg>
  4. </bean>
  5. ….

Output:0 Sonoo


You may pass integer literal and string both as following

  1. ….
  2. <bean id=“e” class=“com.Kreationnext.Employee”>
  3. <constructor-arg value=“10” type=“int” ></constructor-arg>
  4. <constructor-arg value=“Sonoo”></constructor-arg>
  5. </bean>
  6. ….

Comments

comments