使用InitializingBean和DisposableBean来管理bean的生命周期

1.InitializingBean接口

1.1.InitializingBean接口概述

Spring中提供了一个InitializingBean接口,该接口为bean提供了属性初始化后的处理方法,它只包括afterPropertiesSet方法,凡是继承该接口的类,在bean的属性初始化后都会执行该方法。InitializingBean接口的源码如下所示

public interface InitializingBean {

	void afterPropertiesSet() throws Exception;
}

afterPropertiesSet()方法是在属性赋好值之后调用的。

2.DisposableBean接口

2.1.DisposableBean接口概述

实现org.springframework.beans.factory.DisposableBean接口的bean在销毁前,Spring将会调用DisposableBean接口的destroy()方法。

DisposableBean接口的源码,如下所示。

public interface DisposableBean {

	void destroy() throws Exception;
}

在DisposableBean接口中只定义了一个destroy()方法。

在bean生命周期结束前调用destroy()方法做一些收尾工作,亦可以使用destroy-method。前者与Spring耦合高,使用类型强转.方法名(),效率高;后者耦合低,使用反射,效率相对来说较低。

2.2.DisposableBean接口注意事项

多实例bean的生命周期不归Spring容器来管理,这里的DisposableBean接口中的方法是由Spring容器来调用的,所以如果一个多实例bean实现了DisposableBean接口是没有啥意义的,因为相应的方法根本不会被调用,当然了,在XML配置文件中指定了destroy方法,也是没有任何意义的。所以,在多实例bean情况下,Spring是不会自动调用bean的销毁方法的。

3.单实例bean案例

创建一个Cat的类来实现InitializingBean和DisposableBean这俩接口,代码如下所示

package com.tianxia.springannotation.entity;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

import java.io.Serializable;

/**
 * @author liqb
 * @date 2023-04-28 10:00
 **/
public class Cat implements InitializingBean, DisposableBean, Serializable {

    public Cat() {
        System.out.println("cat constructor...");
    }

    /**
     * 会在bean创建完成,并且属性都赋好值以后进行调用
     * @author liqb
     * @date 2023-04-28 10:01
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("cat afterPropertiesSet...");
    }

    /**
     * 会在容器关闭的时候进行调用
     * @author liqb
     * @date 2023-04-28 10:01
     * @throws Exception
     */
    @Override
    public void destroy() throws Exception {
        System.out.println("cat destroy...");
    }

}

在配置类,配置bean

/**
 * 创建cat的bean对象
 * @author liqb
 * @date 2023-04-27 11:53
 * @return
 */
@Bean
public Cat cat() {
    return new Cat();
}

运行测试用例,输出的结果信息如下所示:

在这里插入图片描述

从输出的结果信息中可以看出,单实例bean情况下,IOC容器创建完成后,会自动调用bean的初始化方法;而在容器销毁前,会自动调用bean的销毁方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值