【Spring】对象的生命周期(创建、初始化、销毁)

44 篇文章 1 订阅


一、生命周期

什么是对象的生命周期?

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

为什么要学习对象的生命周期?

  • 由 Spring 负责对象的创建、存活、销毁,了解生命周期,有利于我们使用好 Spring 为我们创建的对象。

生命周期的 3 个阶段:

  • 创建阶段 —> 初始化阶段 —> 销毁阶段

二、创建阶段

Spring 工厂何时创建对象?

scope="singleton":表示只创建一个对象(单例),Spring 工厂(IoC 容器)创建的同时,创建对象。
scope="prototype":Spring 工厂在获取对象 ctx.getBean("xxx") 的同时,创建对象。

通过配置 也可以实现工厂获取对象的同时,创建对象。

三、初始化阶段

Spring 工厂在创建完对象后,调用对象的初始化方法,完成对应的初始化操作。

初始化方法提供:程序员根据需求,提供初始化方法,最终完成初始化操作。
初始化方法调用:Spring 工厂进行调用。

提供初始化方法的两种方式:

3.1 InitializingBean接口

实现InitializingBean接口,重写afterPropertiesSet()方法:

public class Product implements InitializingBean {
	//程序员根据需求实现的方法, 完成初始化操作
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Product.afterPropertiesSet");
    }
}

3.2 配置init-method

对象中提供一个普通的初始化方法,配置文件种配置 init-method

public class Product {
    public void myInit() {
        System.out.println("Product.myInit");
    }
}
<bean id="product" class="com.zqc.Product" init-method="myInit"/>

3.3 分析

如果⼀个对象实现 InitializingBean接口又提供的普通的初始化方法,执行顺序?

  • 先执行 InitializingBean,再执行普通初始化方法。

  • 注入⼀定发生在初始化操作的前面。

初始化操作到底是什么?

  • 资源的初始化:数据库、IO、网络、…

四、销毁阶段

Spring 销毁对象前,会调用对象的销毁方法,完成销毁操作。
Spring 什么时候销毁所创建的对象?ctx.close();

销毁方法提供:程序员根据业务需求,定义销毁方法,完成销毁操作
销毁方法调用:Spring 工厂进行调用。

销毁方法的操作只适用于 scope="singleton",初始化操作都适用。

销毁操作到底是什么?
资源的释放:io.close()、connection.close()、…

开发流程与初始化操作一样,提供销毁方法的两种方式:

4.1 DisposableBean 接口:

实现DisposableBean接口,重写destroy()方法:

public class Product implements DisposableBean {
    // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作
    @Override
    public void destroy() throws Exception {
        System.out.println("Product.destroy");
    }
}

4.2 配置 destroy-method

对象中提供一个普通的销毁方法,配置文件种配置destroy-method

public class Product {
	// 程序员根据自己的需求, 定义销毁方法, 完成销毁操作
    public void myDestory() {
        System.out.println("Product.myDestory");
    }
}
<bean id="product" class="com.zqc.Product" destroy-method="myDestory"/>

五、总结

public class Product implements InitializingBean, DisposableBean {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("Product.setName");
        this.name = name;
    }

    Product() { // 创建
        System.out.println("Product.Product");
    }

    // 程序员根据需求实现的方法, 完成初始化操作
    public void myInit() {
        System.out.println("Product.myInit");
    }

    // 程序员根据需求实现的方法, 完成初始化操作
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Product.afterPropertiesSet");
    }

    public void myDestory() {
        System.out.println("Product.myDestory");
    }

    // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作
    @Override
    public void destroy() throws Exception {
        System.out.println("Product.destroy");
    }
}

<bean id="product" class="com.zqc.Product" init-method="myInit" destroy-method="myDestory">
	<property name="name" value="zqc"/>
</bean>

在这里插入图片描述
在Spring工厂创建完毕后

  1. Spring通过构造方法创建对象,注意,如果是单例对象(scope=singleton),那么该对象在工程创建的同时也完成了创建;如果非单例对象(scope=prototype),会通过ctx.getBean("xx")方法创建对象。
  2. 初始化阶段:会执行实现了InitializingBean接口并重写的afterPropertiesSet方法。
  3. 初始化阶段:根据配置文件中init-method的设置,执行自定义的初始化方法。
  4. 销毁阶段:会执行实现了DIsposableBean接口并重写的destory方法。
  5. 销毁阶段:根据配置文件中destroy-method的设置,执行自定义的销毁方法。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring框架中,对象创建销毁过程经历了以下几个生命周期阶段: 1. 实例化(Instantiation):在这个阶段,Spring容器根据配置信息或注解创建对象的实例。可以使用构造函数实例化对象,也可以通过工厂方法或静态工厂类创建对象。 2. 属性赋值(Population):在对象实例化之后,Spring容器将会通过依赖注入(Dependency Injection)的方式为对象的属性赋值。这可以通过XML配置文件、注解或Java配置类等方式来实现。 3. 初始化(Initialization):在属性赋值完成后,Spring容器会调用对象初始化方法(如果有定义的话)。可以通过在配置文件中指定初始化方法,或者使用@PostConstruct注解来标记初始化方法。 4. 使用(Usage):对象初始化完成后,可以在应用程序中使用这个对象。 5. 销毁(Destruction):当应用程序关闭或不再需要该对象时,Spring容器会调用对象销毁方法(如果有定义的话)。可以通过在配置文件中指定销毁方法,或者使用@PreDestroy注解来标记销毁方法。 需要注意的是,并非所有的对象都需要进行初始化销毁操作,只有在需要特殊处理的情况下才需要定义相应的初始化方法和销毁方法。 通过Spring框架提供的生命周期回调机制,我们可以在对象创建销毁的不同阶段进行一些额外的处理,例如资源的加载和释放、连接的建立和关闭等。这样可以更好地管理和控制对象生命周期

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天边星宿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值