驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
Spring-02:Bean的初始化方法和销毁方法的执行顺序
/  

Spring-02:Bean的初始化方法和销毁方法的执行顺序

开篇

Bean构建之后,可以通过3类方法触发创建后的回调,当然也支持触发销毁后的回调。
这篇文章谈谈初始化触发方法的顺序和销毁时候触发方法的顺序。

初始化

直接上代码:

public class DefaultUserFactory implements InitializingBean {

    @PostConstruct
    public void init() {
        System.out.println("@PostConstruct : UserFactory 初始化中...");
    }

    /**
     * 需要外部进行设置
     */
    public void initUserFactory() {
        System.out.println("自定义初始化方法 initUserFactory() : UserFactory 初始化中...");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean#afterPropertiesSet() : UserFactory 初始化中...");
    }
}

我们需要明确如下几点:

  • InitializingBean是一个接口,需要实现afterPropertiesSet()方法
  • @PostConstruct是一个方法注解,方法要求是public修饰和无返回值void
  • initUserFactory是随便定义的一个方法,方法要求同@PostConstruct,使用的时候,需要通过XML或者注解定义其为构造方法。

从顺序来看,依次是:

@PostConstruct --> InitializingBean -->initUserFactory

销毁

同理,bean销毁的时候也会触发回调:

public class DefaultUserFactory implements DisposableBean {

    @PreDestroy
    public void preDestroy() {
        System.out.println("@PreDestroy : UserFactory 销毁中...");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("DisposableBean#destroy() : UserFactory 销毁中...");
    }

    public void doDestroy() {
        System.out.println("自定义销毁方法 doDestroy() : UserFactory 销毁中...");
    }
}

其顺序仍然是:注解 、接口、自定义方法

@PreDestroy --> DisposableBean --> doDestroy

总结

不管是实例化时候的回调还是销毁时候的回调,依次都是

注解 --> 接口 --> 自定义方法

骐骥一跃,不能十步。驽马十驾,功在不舍。