Spring Framework Tutorial
Software Setup and Configuration (STS/Eclipse/IntelliJ)
Core Spring
Spring Annotations
Spring Data
Spring JDBC
Spring Security
In Spring, apart from using constructors for bean instantiation, you can also make use of factory methods, including static factory methods, to create bean instances. When using a static factory method, the method itself is responsible for returning the instance of the bean.
Here's a step-by-step example of how to use a static factory method in Spring:
Let's assume we have a Car
class, and we want to instantiate it using a static factory method:
public class Car { private String model; private Car(String model) { this.model = model; } public static Car createCarInstance(String model) { return new Car(model); } @Override public String toString() { return "Car [model=" + model + "]"; } }
Notice that the constructor is private
, and we provided a public
static method createCarInstance
that will be responsible for creating the instance of Car
.
To configure the bean using a static factory method, use the class
attribute to specify the class containing the static method and the factory-method
attribute to specify the name of the static method:
<?xml version="1.0" encoding="UTF-8"?> <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.xsd"> <bean id="car" class="Car" factory-method="createCarInstance"> <constructor-arg value="Sedan"/> </bean> </beans>
To ensure everything is correctly set up, let's test our configuration:
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); Car car = (Car) context.getBean("car"); System.out.println(car); } }
When running the App
class, it should print:
Car [model=Sedan]
This demonstrates that the Car
bean was successfully instantiated using the static factory method defined in the Car
class.
Using static factory methods in Spring:
public class MyBeanFactory { public static MyBean createInstance() { return new MyBean(); } }
Static factory method vs constructor in Spring:
public class MyBean { // Using a constructor public MyBean() { // Initialization logic } // Using a static factory method public static MyBean createInstance() { return new MyBean(); } }
Creating beans with static factory methods in Spring:
<!-- XML Configuration --> <beans> <bean id="myBean" class="com.example.MyBeanFactory" factory-method="createInstance"/> </beans>
Configuring static factory methods in Spring XML:
<beans> <bean id="myBean" class="com.example.MyBeanFactory" factory-method="createInstance"/> </beans>
Spring static factory method example:
public class MyBeanFactory { public static MyBean createInstance() { return new MyBean(); } }
Static factory methods in Spring JavaConfig:
@Configuration public class AppConfig { @Bean public MyBean myBean() { return MyBeanFactory.createInstance(); } }
Injecting dependencies using static factory methods in Spring:
public class MyBeanFactory { public static MyBean createInstance(AnotherBean dependency) { return new MyBean(dependency); } }
Defining static factory methods in Spring beans:
public class MyBean { // Using a static factory method public static MyBean createInstance() { return new MyBean(); } }
Spring static factory method vs instance factory method:
public class MyBeanFactory { // Using a static factory method public static MyBean createInstance() { return new MyBean(); } // Using an instance factory method public MyBean createInstanceUsingInstanceMethod() { return new MyBean(); } }
Customizing static factory method behavior in Spring:
public class MyBeanFactory { public static MyBean createInstance(String customizationParam) { // Customization logic based on the parameter return new MyBean(customizationParam); } }
Handling dependencies in static factory methods with Spring:
public class MyBeanFactory { public static MyBean createInstance(AnotherBean dependency) { return new MyBean(dependency); } }
Using static factory methods for bean creation in Spring Boot:
@SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } @Bean public MyBean myBean() { return MyBeanFactory.createInstance(); } }
Configuring parameters for static factory methods in Spring:
public class MyBeanFactory { public static MyBean createInstance(String param1, int param2) { // Logic using parameters return new MyBean(param1, param2); } }
Lazy initialization with static factory methods in Spring:
public class MyBeanFactory { private static MyBean instance; public static synchronized MyBean createInstance() { if (instance == null) { instance = new MyBean(); } return instance; } }
Injecting values into static factory methods in Spring:
public class MyBeanFactory { public static MyBean createInstance(String injectedValue) { // Logic using the injected value return new MyBean(injectedValue); } }
Static factory method with conditional bean creation in Spring:
public class MyBeanFactory { public static MyBean createInstance(boolean condition) { if (condition) { return new MyBean(); } else { return null; // or handle differently based on condition } } }