public boolean isSingleton() { // true 为单实例 false 每一次都会创建新的对象 return true;}// 如果没有isSingleton方法还是通过 scope属性控制
1.3为什么控制对象创建次数节省内存1.可以公用的创建一次就可以1.SqlSessionFactory2.DAO3.Service2.不能被公用就需要每次都创建1.Connection2.sqlSession | Session
2.对象的生命周期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.myInit3.什么叫做初始化操作对于资源的初始化数据库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()