第九章--对象的⽣命周期(工厂高级特性)

1. 什么是对象的⽣命周期

指的是⼀个对象创建、存活、消亡的⼀个完整过程。

2. 为什么要学习对象的⽣命周期

new 出来的对象 最终内存不够由JVM虚拟机的垃圾回收GC 或者进程结束消亡。
由Spring负责对象的创建、包括存在、销毁,了解生命周期,有利于我们使用Spring为我们创建的对象。

3.生命周期的3个阶段

1.创建阶段

Spring工厂何时创建对象
scope="singleton":只需要一个对象---Spring工厂创建的同时,完成对象的创建。
   工厂创建:ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
 ==============================================
   注意:如果在scope="singleton"时 要Spring工厂在获取对象(ctx.getBean(""))时创建对象,而不是工厂创建的时候完成对象的创建,则需要懒初始化---在创建对象的bean标签中:<bean lazy-init="true"/>  (懒汉)
 ==================================================
   scope="prototype":需要多个对象
Spring工厂会在获取对象的同时,创建对象。
    ---- 获取对象:ctx.getBean("")注意:获取和创建对象的区别  

2.初始化阶段

Spring⼯⼚在创建完对象后,调⽤对象的初始化⽅法,完成对应的初始化操作。
    
1. 初始化⽅法提供:程序员根据需求,提供初始化⽅法,最终完成初始化操作。
2. 初始化⽅法调⽤:Spring⼯⼚进⾏调⽤ 

初始化方法在哪写?
第一种方式(耦合了Spring):    
InitializingBean接⼝
   //程序员根据需求,实现接口的⽅法afterProperitesSet(),完成初始化操作
public class Product implements InitializingBean {
    public Product(){
        System.out.println("无参构造");
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Product.afterPropertiesSet");
    }
}

第二种方式(不耦合Spring 不用实现接口):
对象中提供⼀个普通的⽅法
    public void myInit(){
}
自定义的方法Spring不知道,如何自动调用初始化方法呢?
    配置文件中配置:
<bean id="product"class="xxx.Product" init-method="myInit"/>

细节分析:

1. 如果⼀个对象实现了InitializingBean接口的同时⼜提供了 普通的初始化⽅法 执行顺序:	
	1. InitializingBean
	2. 普通初始化⽅法
    
2. 注⼊⼀定发⽣在初始化方法操作的前⾯(可以看到InitializingBean接⼝的afterPropertiesSet()方法名翻译过来是是:在属性注入之后)
    
3.什么叫做初始化操作:
    资源的初始化:数据库 IO ⽹络.....

3.销毁阶段

Spring销毁对象前,会调⽤对象的销毁⽅法,完成销毁操作。

1.Spring什么时候销毁 创建的对象?
   ctx.close();//工厂关闭
2. 销毁⽅法:程序员根据⾃⼰的需求,定义销毁⽅法,完成销毁操作
 调⽤:Spring⼯⼚完成调⽤。

第一种销毁方式 :实现DisposableBean接口

public void test6() {
       ClassPathXmlApplicationContext ctx =  new ClassPathXmlApplicationContext("/applicationContext.xml");
        Account account1 = (Account) ctx.getBean("account");
        ctx.close();
    }
public class Product implements DisposableBean {
    public Product(){
        System.out.println("无参构造");
    }
    @Override
    //销毁操作:资源释放
   public void destroy()throws Exception{

}
}

第二种方式:定义⼀个普通的销毁⽅法

public void myDestroy() throws Exception{ 
}

<bean id="product"class="xxx.Product"  init-method="" destroy-method="myDestroy"/>

细节分析:

销毁⽅法的操作只适⽤于 scope="singleton"
    什么叫做销毁操作:
主要指的就是 资源的释放操作 
io.close()
connection.close();

在这里插入图片描述

本系列文章从Spring5原理开始深入浅出,从工厂特性=>依赖注入–IOC=>AOP编程=>Spring事务=>纯注解开发。本文来自观看B站孙帅Spring教程后做的笔记。持续更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值