Spring5深入浅出篇:bean的生命周期
什么是对象的⽣命周期
指的是⼀个对象创建、存活、消亡的⼀个完整过程
为什么要学习对象的⽣命周期
由Spring负责对象的创建、存活、销毁,了解⽣命周期,有利于我们使⽤好Spring为我们创建的对象
⽣命周期的3个阶段
- 创建阶段
Spring⼯⼚何时创建对象
scope="singleton"
当bean标签中增加scope="singleton"时,当你创建对象所有的引用都是第一个对象的内存地址;sigleton:只会创建⼀次简单对象 默认值
Spring⼯⼚创建的同时,对象的创建 注意:设置scope=singleton 这种情况下 也需要在获取对象的同时,创建对象 <bean lazy-init="true"/>
scope="prototype"
prototype:每⼀次都会创建新的对象
Spring⼯⼚会在获取对象的同时,创建对象 ctx.getBean("")
- 初始化阶段
Spring⼯⼚在创建完对象后,调⽤对象的初始化⽅法,完成对应的初始化操作 1. 初始化⽅法提供:程序员根据需求,提供初始化⽅法,最终完成初始化操作 2. 初始化⽅法调⽤:Spring⼯⼚进⾏调⽤
- 实现InitializingBean接⼝,重写afterProperitesSet()方法完成初始化操作
//程序员根据需求,实现的⽅法,完成初始化操作 public void afterProperitesSet(){ }
- 对象中提供⼀个普通的⽅法(通过配置的方式将初始化方法指定给Spring)
public void myInit(){ } <bean id="product" class="xxx.Product" init-method="myInit"/>
- 细节分析
如果⼀个对象即实现InitializingBean 同时⼜提供的 普通的初始化⽅法 顺序
1. InitializingBean 2. 普通初始化⽅法
注⼊⼀定发⽣在初始化操作的前⾯
什么叫做初始化操作
资源的初始化:数据库 IO ⽹络 .....
- 销毁阶段
Spring销毁对象前,会调⽤对象的销毁⽅法,完成销毁操作 1. Spring什么时候销毁所创建的对象?工厂关闭时销毁所创建的对象 ctx.close(); 2. 销毁⽅法:程序员根据⾃⼰的需求,定义销毁⽅法,完成销毁操作 调⽤:Spring⼯⼚完成调⽤
- 实现DisposableBean接口来重写destroy()方法来定义对象销毁时需要的操作
public void destroy()throws Exception{ }
- 定义⼀个普通的销毁⽅法(通过配置的方式将对象销毁的方法指定给Spring)
public void myDestroy()throws Exception{ } <bean id="" class="" init-method="" destroy-method="myDestroy"/>
- 细节分析
- 销毁⽅法的操作只适⽤于 scope="singleton"
- 什么叫做销毁操作
主要指的就是 资源的释放操作 io.close() connection.close();