1.2控制复杂对象创建次数prototype 每一都会创建新的 singleton 只创建一次 默认为singleton
public boolean isSingleton() {
// true 为单实例 false 每一次都会创建新的对象
return true;
}
// 如果没有isSingleton方法还是通过 scope属性控制
1.3为什么控制对象创建次数
节省内存 1.可以公用的创建一次就可以 1.SqlSessionFactory 2.DAO 3.Service 2.不能被公用就需要每次都创建 1.Connection 2.sqlSession | Session2.对象的生命周期
1.什么是对象的生命周期 一个对象 创建 存活 消亡 的过程 2.为什么要学习生命周期 由spring来负责对象的创建 存活 销毁 有利于我们使用Spring为我们创建的对象2.1生命周期的三个阶段
创建阶段
scope = "singleton" Spring工厂在创建的创建 如果想获取的时候再创建 lazy-init = "true" scope = "prototype" 在我们获取对象的同时创建对象 ctx.getBean()
初始化阶段
Spring在创建完对象后,调用完初始化方法,完成对应的初始化操作 1.初始化方法 由程序员提供的,提供初始化方法,由Spring工厂调用
实现InitializingBean接口
import org.springframework.beans.factory.InitializingBean;
public class Product implements InitializingBean {
// 1.调用构造器创建对象
public Product() {
System.out.println("Product的无参构造器!");
}
// 创建完成之后 初始化对象
public void afterPropertiesSet() throws Exception {
System.out.println("Product.afterPropertiesSet()");
}
}
普通方法
1.提供普通方法
public void myInit() {
System.out.println("Product.myInit");
}
2.在spring配置文件中注册
细节分析
1.如果上述方法都有,那么顺序是什么呢? 1.Product.afterPropertiesSet() 2.Product.myInit() 2.如果对象中有成员变量,那么顺序如何呢? 注入一定发生在初始化前面 1.Product.setPrice() set注入~ 2.Product.afterPropertiesSet() 3.Product.myInit 3.什么叫做初始化操作 对于资源的初始化 数据库 IO 网络
销毁阶段
什么是销毁 spring在销毁对象前,会调用销毁方法,完成销毁操作 1.什么时候会销毁创建的对象 spring工厂在关闭的时候
实现DisposableBean接口
public void destroy() throws Exception {
System.out.println("Product.destroy()");
}
普通方法
public void myDestroy() {
System.out.println("Product.myDestroy()");
}
//配置文件:destroy-method="myDestroy"
细节分析
1.销毁方法只适用于scope = "singleton"的对象 重量级对象! 2.销毁操作指的是资源的释放 io.close() connection.close()



