在 自定义Bean里 可以设置创建 bean 实例是单实例还是多实例的,默认情况下, bean 是单实例对象。
例如:
@Test
public void testBean2() {
//1 加载spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("bean1.xml");
//2 获取配置创建的对象
Emp emp = context.getBean("emp", Emp.class);
Emp emp1 = context.getBean("emp", Emp.class);
System.out.println(emp);
System.out.println(emp1);
}
打印结果是:
com.liuqingchao.spring5.Emp@c8211c
com.liuqingchao.spring5.Emp@c8211c
设置方法:
(1)在 spring 配置文件 bean 标签里面有属性(scope)用于设置单实例还是多实例。
例如上面的配置改成:
<bean id="emp" class="com.liuqingchao.spring5.Emp" scope="prototype">
就可以看到两个bean不一样。
1 singleton 和 prototype 区别
第一 singleton 单实例, prototype 多实例
第二 设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象
设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用
getBean 方法时候创建多实例对象。
2.bean 生命周期
(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)调用 bean 的初始化的方法(需要进行配置初始化的方法)
(4) bean 可以使用了(对象获取到了)
(5)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)
bean 的后置处理器, bean 生命周期有七步:
(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)把 bean 实例传递 bean 前置处理器的方法 postProcessBeforeInitialization
(4)调用 bean 的初始化的方法(需要进行配置初始化的方法)
(5)把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization
(6) bean 可以使用了(对象获取到了)
(7)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)