控制Spring工厂创建对象的次数
1.如何控制简单对象的创建次数
<bean id="account" scope="singleton|prototype" class="xxx.xxx.xxx"/>
singleton:只会创建一次简单对象 默认值
prototype:每一次创建都会创建新的对象
2.如何控制复杂对象的创建次数
Factory{
isSingleton(){
return true;//只会创建一次
return false;//每一次都会创建新的
}
如果没有isSingleton方法,还是通过scope属性 进行对象创建次数的控制
3.为什么要控制对象的创建次数?
好处:节省不必要的内存浪费
- 什么样的对象只创建一次?
1.SqlSessionFactory
2.DAO
3.Service
- 什么样的对象创建多次?
Connection
SqlSeesion|Session
对象的生命周期
1.什么是对象生命周期
指的是一个对象创建、存活、消亡的一个过程
2.为什么要学习对象的生命周期
由Spring负责对象的创建、存活、销毁,了解生命周期,更加有利于使用好Spring框架
3.生命周期三个阶段
-
创建阶段
Spring工厂何时创建对象
- scope="singleton"(也在获取时创建 lazy-init="true")//懒加载
Spring工厂创建的同时,对象的创建
- scope="prototype"
Spring工厂会在获取对象的同时,创建对象
ctx.getBean("")
-
初始化阶段
Spring工厂在创建完对象后,调用对象的初始化方法,完成对应的初始化操作
1.初始化操作:程序员根据需求,提供初始化方法,最终完成初始化操作
2.初始化方法调用:Spring工厂进行调用
- initalizingBean接口
//程序员根据需求,实现的方法,完成初始化操作
public void afterPropertitiesSet() 完成初始化
- 对象种提供一个普通的方法
public void myInit(){
}
<bean id="product" class="xxx.",init-method="myInit">
- 细节分析:
1.如果一个对象既实现InitializingBean同时又提供普通的初始化方法 顺序
1.InitializingBean
2.普通初始化方法
2.注入一定发生在初始化操作的前面
3.什么叫初始化操作
资源的初始化:数据库、IO、网络.....
-
销毁阶段
Spring销毁对象前,会调用对象的销毁方法,完成销毁操作
1.Spring什么时候销毁所创建的对象呢?
ctx.close();//工厂关闭的时候
2.销毁方法:程序员根据自己的需求,定义销毁方法,完成销毁方法操作
调用:Spring工厂发发调用
- DisposableBean
- 自定义普通销毁方式
细节分析
1.销毁方法的操作只适用于scope="singleton"
2.什么叫销毁操作:
主要指的就是:资源的释放操作