Instantiate Spring Beans with a Constructor Example
This tutorial shows complete example on how to instantiate beans in spring framework with a constructor.
Instantiate beans with a Constructor
To instantiate spring beans using a constructor, you need to specify the bean class and set properties or constructor arguments after the object is constructed a shown in the following bean declaration.
beans-initialize-constructor-example.xml
<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-4.3.xsd"> <bean id="department" class="com.sneppets.initializebeans.constructor.Department"> <property name="name" value="Sales" /> </bean> <bean id="employee" class="com.sneppets.initializebeans.constructor.Employee"> <!-- Constructor based dependency injection --> <constructor-arg name="name" value="John"/> <constructor-arg name="department" ref="department"/> </bean> </beans>
Department.java
package com.sneppets.initializebeans.constructor; public class Department { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Employee.java
package com.sneppets.initializebeans.constructor; import java.beans.ConstructorProperties; public class Employee { private String name; private Department department; //instantiation with a constructor //spring container can inject a department @ConstructorProperties({"name", "department"}) public Employee(String name, Department department) { this.name = name; this.department = department; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } }
Note, to set the values for constructor arguments we have used “Constructor argument name” way as explained in the following tutorial. Hence to explicitly name your constructor arguments in your Employee class, we have used @ConstructorProperties in the above code.
ConstructorInstantiationExample.java
Now, let’s create a test class to perform instantiation of beans with a constructor approach.
package com.sneppets.initializebeans.constructor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ConstructorInstantiationExample { public static void main (String[] args) { ApplicationContext context = (ApplicationContext) new ClassPathXmlApplicationContext( "beans-initialize-constructor-example.xml"); Employee emp = (Employee) context.getBean("employee"); System.out.println("Employee Name: " + emp.getName()); System.out.println("Department Name: " + emp.getDepartment().getName()); } }
When you try to run above test class you would get the following output, where the employee bean is instantiated by Spring container using constructor approach by setting values for constructor arguments <constructor-arg/>.
Output
Employee Name: John Department Name: Sales