4. Bean的生命周期

本文详细介绍了Spring框架中Bean的生命周期,包括Bean从创建到销毁的整个过程。探讨了如何通过配置初始化和销毁方法来控制Bean的生命周期,并展示了实现InitializingBean和DisposableBean接口的方式。

Bean的生命周期

1.生命周期相关概念介绍

  • 生命周期:从创建到消亡的完整过程
  • bean生命周期:bean从创建到销毁的整体过程
  • bean生命周期控制:在bean创建后到销毁前做一些事情

2. Bean销毁时机

容器关闭前触发bean的销毁

关闭容器方式:

  • 手工关闭容器
    ConfigurableApplicationContext接口close()操作
  • 注册关闭钩子,在虚拟机退出前先关闭容器再退出虚拟机
    ConfigurableApplicationContext接口registerShutdownHook()操作
public class AppForLifeCycle {
    public static void main( String[] args ) {
        //此处需要使用实现类类型,接口类型没有close方法
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
        //注册关闭钩子函数,在虚拟机退出之前回调此函数,关闭容器
        ctx.registerShutdownHook();
        //关闭容器
        //ctx.close();
    }
}

3. 配置方式实现Bean生命周期控制

3.1 在要控制的bean中提供生命周期控制方法

 /**
     * 表示bean初始化对应的操作
     */
    public void init(){
        System.out.println("init");
    }


    /**
     * 表示bean销毁前对应的操作
     */
    public void destory(){
        System.out.println("destory");
    }

3.2 applicationContext.xml配置

<!--init-method:设置bean初始化生命周期回调函数,此处填写init方法名-->
<!--destroy-method:设置bean销毁生命周期回调函数,仅适用于单例对象,此处填写destory方法名-->
<bean id="bookDao" class="com.lin.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>

3.2 创建容器获取bean

public class AppForLifeCycle {
    public static void main( String[] args ) {
        //此处需要使用实现类类型,接口类型没有close方法
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
        //关闭容器,执行销毁的方法
        ctx.close();
    }
}

3.3 程序运行结果

image-20221216001817979

4. 实现InitializingBean, DisposableBean接口也能控制bean生命周期

package com.lin.dao.daoimpl;

import com.lin.dao.BookDao;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class BookDaoImpl implements BookDao , InitializingBean, DisposableBean {

    public BookDaoImpl() {
        //System.out.println("BookDao的无参构造器");
    }

    /**
     * 数据层实现
     */
    public String queryBooks() {
        System.out.println("数据层查询书本方法");
        return "数据层查询书本方法";
    }


    @Override
    public void destroy() throws Exception {
        System.out.println("destory");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("init");
    }
}






评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

糖分你俩颗~~~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值