控制对象创建次数
简单对象
配置文件中 scope属性
单例(默认)只创建一次对象。
创建多个
复杂对象
factorybean方法创建
如果没有用factorybean还是实用scope属性
为什么要控制对象的创建次数?
根据对象自身的特点决定对象的创建情况。
好处:节省不必要的内存浪费。
什么样的对象只创建一次?
sqlsessionFactory
dao
service
什么样的对象每一次都要创建新的?
connection
session
对象的生命周期
- 什么是对象的生命周期?
一个对象创建、存活、消亡的一个完整过程 - 为什么要学习对象的生命周期
因为由spring负责对象的创建、存活、销毁,了解生命周期,有利于使用好spring 框架 - 生命周期的3个阶段
创建阶段:
scope = singleton 工厂创建时对象创建(增加lazy init属性也可以变成获取时创建)
scope=prototype 工厂会再获取对象的同时创建对象(getbean)
初始化阶段
spring工厂创建对象后,会调用对象的初始化方法,完成对应的初始化操作。
1.初始化方法提供:程序员根据需求提供初始化方法
2.初始化方法调用:spring工厂进行调用
初始化方法1:类实现initializingBean接口,的afterpropertiesset方法。
初始化方法2:方法1虽然很好,但是耦合的spring框架。
对象提供一个普通的方法。所以spring怎么认识这个方法呢?当然是配置文件。
细节分析:
- 两个初始化操作执行顺序:先执行initializingBean,后执行自己的普通方法。
- 如果有注入需求,注入和初始化顺序:先注入,后初始化。所以名字叫做afterproperteset。
- 什么叫做初始化操作?对于资源的初始化:数据库资源、IO资源、网络资源
销毁阶段
spring销毁对象前,会调用对象的销毁方法,完成销毁操作,销毁操作就是对应初始化的资源的释放操作。
- 什么时候销毁创建对象?
工厂关闭的时候。 - 销毁方法:程序员定义,spring工厂调用。
销毁方法1:实现DisposableBean接口,的destory方法。
销毁方法2:自己定义一个方法,配置文件配置一下。
接口先调用,自己定义的后调用。
细节分析:
- 销毁方法的操作只适用于scope=singleton
- 什么叫做销毁操作?主要指的就是资源的释放操作,io 和连接的close。