一、概述
所谓实例化bean,大白话讲就是Spring如何把这一个个的普通的Java对象创建为Spring bean的。
二、方式
Spring中实例化bean常用的有以下四种,即:
① 构造器方式;
② 静态工厂方式;
③ 实例工厂方式;
④ FactoryBean方式;
下面通过案例进行部分代码的演示:
2.1、 构造器方式(略)
2.2、静态工厂方式
2.2.1、User
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/26 18:03
* @Description:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@ToString(callSuper = true)
public class User implements Serializable {
private String name;
private Integer age;
public static User instantiateUser() {
System.out.println("User's instantiateUser() was invoked!");
return new User();
}
}
2.2.2、applicationContext.xml
<!--
通过静态工厂方式实例化bean
注意事项:factory-method指定的方法需为静态方法
-->
<bean id="user" class="org.star.User" scope="prototype" factory-method="instantiateUser"></bean>
2.2.3、测试
@Test
public void instantiateUser() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = context.getBean("user",User.class);
System.out.println("user = " + user);
}
2.3、实例工厂方式
2.3.1、User(同上)
2.3.2、UserFactory
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/26 18:22
* @Description:
*/
public class UserFactory {
public User instantiateUser() {
System.out.println("UserFactory's instantiateUser() was invoked!");
return new User();
}
}
2.3.3、applicationContext
<!--
通过实例工厂的方式实例化bean
说明:@Bean的底层就是通过 factory-bean + factory-method 实现的
-->
<bean id="userFactory" class="org.star.UserFactory"></bean>
<bean id="user2" class="org.star.User" factory-bean="userFactory" factory-method="instantiateUser"></bean>
2.3.4、测试
@Test
public void instantiateUser() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = context.getBean("user2",User.class);
System.out.println("user = " + user);
}
2.4、FactoryBean方式
参考 系列三、IOC操作bean管理 #基于FactoryBean方式,这里不再赘述。