This example show you how to create a bean using factory method in Spring Framework. We will use a singleton as an example. An instance of a singleton can be obtained only from a factory method because a singleton will have a private constructor, so it will not be possible to create an instance of this class from outside the singleton itself.
Here is our singleton bean will look like. To get an instance of it we will need to call the getInstance()
method.
package org.kodejava.spring.core;
public class Singleton {
/**
* Private constructor.
*/
private Singleton() {
}
/**
* Get an instance of Singleton class.
*
* @return an instance of Singleton class.
*/
public static Singleton getInstance() {
return SingletonHolder.instance;
}
/**
* Do something.
*/
public void doSomething() {
System.out.println("Singleton.doSomething");
}
private static class SingletonHolder {
static Singleton instance = new Singleton();
}
}
Next, we will create a spring configuration file. At it simplest a bean in the configuration file will have an id
and a class
. To tell the spring container to create the bean using a factory method we must use the factory-method
attribute of the bean element.
Here is our configuration file and we name it factory-method.xml
.
<?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="singleton" class="org.kodejava.spring.core.Singleton" factory-method="getInstance"/>
</beans>
Let’s now run our program below:
package org.kodejava.spring.core;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class FactoryMethodDemo {
public static void main(String[] args) {
try (ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("factory-method.xml")) {
Singleton instance = (Singleton) context.getBean("singleton");
instance.doSomething();
}
}
}
Maven Dependencies
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.3.23</version>
</dependency>
</dependencies>
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024