Instantiate Spring Beans using Static Factory Method Example
This tutorial shows complete example on how to instantiate beans in spring framework with a Static Factory Method.
Instantiate beans with a Static Factory Method
In the previous tutorial you have seen how to Instantiate Spring Beans with a Constructor. To instantiate beans using Static Factory Method, you need to use the class attribute to mention the class that contains the static factory method and an attribute named factory-method to mention the factory method name as shown below. And you can set object instance properties or supply constructor arguments to the factory method as shown below.
beans-initialize-staticfactorymethod-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.staticfactorymethod.Department"> <property name="name" value="Sales" /> </bean> <bean id="employee" class="com.sneppets.initializebeans.staticfactorymethod.Employee" factory-method="getEmployeeInstance"> <constructor-arg index="0" value="John"/> <constructor-arg index="1" ref="department"/> </bean> </beans>
Also refer to the following classes corresponding to the bean definitions above.
Employee.java
package com.sneppets.initializebeans.staticfactorymethod; public class Employee { private String name; private Department department; public Employee(String name, Department department) { this.name = name; this.department = department; } public static Employee getEmployeeInstance(String name, Department department) { return new Employee(name, 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; } }
Department.java
package com.sneppets.initializebeans.staticfactorymethod; public class Department { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
StaticFactoryMethodInstantiationExample.java
Now, let’s create a test class to perform instantiation of beans with a static factory method approach.
package com.sneppets.initializebeans.staticfactorymethod; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class StaticFactoryMethodInstantiationExample { public static void main (String[] args) { ApplicationContext context = (ApplicationContext) new ClassPathXmlApplicationContext( "beans-initialize-staticfactorymethod-example.xml"); Employee emp = (Employee) context.getBean("employee"); System.out.println("Employee Name: " + emp.getName()); System.out.println("Department Name: " + emp.getDepartment().getName()); } }
Output
Employee Name: John Department Name: Sales
Also See:
- Different ways to instantiate beans in Spring Framework
- How to use p-namespace in Spring XML configuration for specifying a property argument concisely?
- Difference between Spring ApplicationContext and BeanFactory