Spring IOC/DI(三.bean的生命周期)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

        我们已经了解了IOC容器创建、环境配置以及IOC对象的三种实例化方式,现在我们学习bean的生命周期,了解bean对象从创建到销毁的整体过程


一、Bean的生命周期

对于生命周期,我们主要围绕着 bean 生命周期控制
  • 首先我们理解什么是生命周期?
         从创建到消亡的完整过程 , 例如人从出生到死亡的整个过程就是一个生命周期。
  • bean生命周期是什么?
        bean对象从创建到销毁的整体过程    
  •  bean生命周期控制是什么?

        bean创建后到销毁前做一些事情。


二、生命周期实例

在上面这个环境中来为BookDao添加生命周期的控制方法,具体的控制有两个阶段:

  • bean创建之前,想要添加内容,比如用来初始化需要用到资源
  • bean销毁之前,想要添加内容,比如用来释放用到的资源

我们重新搭建一个环境

  • 创建一个Maven项目
  • pom.xml添加依赖
  • resources下添加spring的配置文件applicationContext.xml

配置好环境之后

生命周期设置

步骤1:添加初始化和销毁方法

public class BookDaoImpl implements BookDao {
    

    @Override
    public void save() {
        System.out.println("book dao save~");
    }

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

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

}

步骤二:配置生命周期

<bean id="bookDao" class="com.Impl.dao.BookDaoImpl" 
init-method="init" destroy-method="destory"/>

注意:此时destory方法并不会执行。

  • Spring的IOC容器是运行在JVM中
  • 运行main方法后,JVM启动,Spring加载配置文件生成IOC容器,从容器获取bean对象,然后调方 法执行
  • main方法执行完后,JVM退出,这个时候IOC容器中的bean还没有来得及销毁就已经结束了
  • 所以没有调用对应的destroy方法

close关闭容器

close()方法

ApplicationContext中没有close方法

所以要将 ApplicationContext 更换为ClassPathXmlApplicationContext

ClassPathXmlApplicationContext ctx =
                new ClassPathXmlApplicationContext("applicationContext.xml");
    //调用ctx的close()方法
    ctx.close();

除了上述方法外,我们还有一种方法也可以关闭容器

注册钩子关闭容器

  • 在容器未关闭之前,提前设置好回调函数,让JVM在退出之前回调此函数来关闭容器
  • 调用ctx的registerShutdownHook()方法
ctx.registerShutdownHook();

注意:registerShutdownHook在ApplicationContext中也没有


三、bean生命周期小结

(1).Spring中对bean生命周期控制提供了两种方式

  • 在配置文件中的bean标签中添加init-method和destroy-method属性
  • 类实现InitializingBean与DisposableBean接口,这种方式了解下即可

(2).对于bean的生命周期控制在bean的整个生命周期中所处的位置如下

初始化容器

  1. 创建对象(内存分配)
  2. 执行构造方法
  3. 执行属性注入(set操作)
  4. 执行bean初始化方法

使用bean

  1.  执行业务操作

关闭/销毁容器

关闭容器的两种方式:

  • close()方法
  • registerShutdownHook()方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值