The way Spring instantiates beans

  • Constructor
  • Static factory mode
  • Example chemical plant mode

A case in field

Constructor to instantiate the bean object

<bean id="hello" name="hello" class="com.xxx.demo.Hello"></bean>
Copy the code

** The empty constructor created by the default constructor must exist or the creation fails **

Static factory mode

Features:

Have the factory class and factory method

The factory method is static

StaticFactory indicates the StaticFactory

/** * Static factory mode ** /
public class StaticFactory {
	public static GoodsService createGoodsService(a) {// The method must be static
		return newGoodsService(); }}Copy the code

GoodsService entity class

public class GoodsService {
	public void getGoodsInfo(a) {
		System.out.println("Alien thieves are cheap."); }}Copy the code

Bean configuration

<bean id="goodsService" 
		class="com.xxx.demo.StaticFactory" factory-method="createGoodsService"></bean>
Copy the code

When we specify that Spring uses static factory methods to create Bean instances, Spring first parses the configuration file and, based on the information specified in the configuration file, ** calls the static factory method of the static factory class through reflection and takes the return value of the static factory method as the Bean instance. ** In this process, Spring is no longer responsible for creating Bean instances, which are provided by static factory methods provided by the user.

Create the Bean in a chemical instance

Compare this to a static factory implementation

1. The factory method is a non-static method

2. You need to configure the factory bean and configure the factory-bean and factory-method properties in the business bean

Example Chemical Plant Definition

/** ** *@author Best Liu
 *
 */
public class InstanceFactory {
	public OrderService createOrderService(a) {
		return newOrderService(); }}Copy the code

Entity Class Definition

public class OrderService {
	public void getOrderInfo(a) {
		System.out.println("Dear, I have placed the order, but there is no way to deliver it."); }}Copy the code

Bean configuration

<! 2. Reference the factory bean to specify the factory creation method (method non-static).
	<bean id="instanceFactory" class="com.xxx.demo.InstanceFactory"></bean>
	<bean id="orderService" factory-bean="instanceFactory" factory-method="createOrderService"></bean>
Copy the code

extension

Compare the three ways Spring instantiates beans

Method 1: ** is created using the bean’s default constructor. ** Can be used when the business logic of the individual beans is relatively independent of each other or less associated with the outside world.

Method 2: the use of static factory method to create, you can unified management of the creation of each bean, such as each bean before the creation of the same initialization process, you can use the factory method for unified processing and so on.

Method 3: use the instantiation factory method to create, that is, factory method also as a business bean to control,

Bean creation management methods that can be used to integrate with other frameworks

2. Be able to switch the roles of bean and factory

In development, projects generally use one way to instantiate beans. Project development basically adopts the first way, which is handed over to Spring for hosting and used directly, and the other two ways can be understood.